編程題計算
『壹』 編程題:一隻大雞3元,三隻小雞1元,如何用100塊錢買100隻雞
簡單啊。。。
大雞為x, 小雞數為3y(說明:這里小雞的數量一定是3的倍數,因為100元買100隻雞,雞不可能買小數只。。。所以大雞的價錢不可能產生小數。在這樣的情況下小雞的價錢也不會產生小數100-3x,這樣的話,必須是3的倍數才可以保證)
列出方程得到:
x+3y=100
3x+1*(3y/3)=100 =>3x+y=100;
解之,得到:
x=100-3y
3(100-3y)+y=100
300-8y=100
8y=200 , y=25
x = 25
so, 大雞25隻,小雞75隻
編程可以用計演算法,如上方程。
也可以用窮舉法:
python
>>> filter(lambda i: i[0]*3+i[1]/3==100 and i[0]+i[1]==100, [[x,y] for x in range(0, 101) for y in range(0, 101)])
[[25, 75]]
so, 大雞25隻,小雞75隻。
可以。。。請稍等。。。
C#版:
using System;
namespace ConsoleApplication1 {
class Program {
static void Main(string[] args) {
for (int i = 0; i <= 100; i++) {
for (int j = 0; j <= 100; j++) {
//i-大雞 j小雞
if (i * 3 + j / 3 == 100 & i + j == 100) {
Console.WriteLine("大雞{0}只,小雞{1}只", i, j);
}
}
}
Console.ReadKey();
}
}
}
c版:
#include <stdio.h>
int main()
{
int i, j;
for(i=0; i<=100; i++)
for (j=0; j<=100; j++)
if (i+j==100 && 3*i+j/3==100)
printf("大雞%d只, 小雞%d只\n", i, j);
return 0;
}
結果都是一樣的:大雞25隻,小雞75隻
優化:
反正大小雞共100隻,可以直接根據大雞數量計算小雞,這樣去掉一層循環:從循環1萬次減到100次。
#include <stdio.h>
int main()
{
int i;
for(i=0; i<=100; i++){
int j = 100 - i;
if (3*i+j/3==100)
printf("大雞%d只, 小雞%d只\n", i, j);
}
return 0;
}
繼續優化:
小雞的數量一定是3的整數倍,所以可以用小雞數量來循環,可以使循環數量再減少:
#include <stdio.h>
int main()
{
int j; //小雞的數量一定是3的整數倍
for(j=0; 3*j<=100; j++){
int i = 100 - 3*j;
if (3*i+j==100)
printf("大雞%d只, 小雞%d只\n", i, 3*j);
}
return 0;
}
『貳』 c語言編程問題:使用函數計算兩點間的距離。
輸入兩點坐標(X1,Y1),(X2,Y2),計算並輸出兩點間的距離。
輸入數據有多組,每組佔一行,由4個實數組成,分別表示x1,y1,x2,y2,數據之間用空格隔開。
#include<stdio.h>
#include<math.h>
void main()
{
float x1,x2,y1,y2;
printf("請輸入一組數據:");
while(~scanf("%f%f%f%f",&x1,&y1,&x2,&y2))//開始讀取輸入的數,知道文件結束。
{
printf("兩點間的距離為:%.2f ",sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));
printf("請輸入一組數據:");
}
}
(2)編程題計算擴展閱讀:
c語言基本運算
一:算術運算符
算術運算符非常地簡單,就是小學數學裡面的一些加減乘除操作。不過呢,還是有一些語法細節需要注意的。
一、加法運算符+
int a=10;
(此處空一行)
int b=a+5;
在第3行利用加法運算符+進行了加法運算,再將和賦值給了變數b,最終變數b的值是15
二、減法運算符或負值運算符-
int b=10-5;
(此處空一行)
int a=-10;
1、在第1行利用減法運算符-進行了減法運算,再將差賦值給了變數b,最終變數b的值是5
2、在第3行中,這個-並不是什麼減法運算符,而算是一個負值運算符,-10代表的是負十
三、乘法運算符*
int b=10*5;
注意:乘法運算符並不是x或者X,而是星號*。變數b最終的值是50。
四、除法運算符/
double a=10.0/4;
double b=10/4;
(此處空一行)
printf("a=%f,b=%f ",a,b);
注意:除法運算符並不是÷,而是一個正斜杠/