求阶梯数
在你面前有一条长长的阶梯,如果你每次跨两阶,那么最后剩余一阶,如果你每次跨三阶,那么最后剩两阶,如果你每次跨5阶最后剩4阶,如果你每次跨6阶,最后剩余5阶,只有当你每次跨7阶,才正好到头,这个楼梯到底有多少阶,
分析,因为每次跨7阶,才正好到头,说明楼梯的阶数是7的倍数
int main(){
ladder = 7;
while(1){
if((ladder%2==1)&&(ladder%3==2)&&(ladder%5==4)&&(ladder%6==5)&&(ladder%7==0)){
printf("最少需要%d",ladder);
break;
}
ladder+=7;
}
}
五家共井
现在有五家共用一口井,甲、乙、丙、丁、戌五家各有一条绳子汲水(下面用文字表示每一家的绳子):甲×2+乙=井深,乙×3+丙=井深,丙×4+丁=井深,丁×5+戌=井深,戌×6+甲=井深,求甲、乙、丙、丁、戌各家绳子的长度和井深。
分析 设井深为len,甲的绳长 len1,乙的绳长 len2,丙的绳长 len3,丁的绳长 len4,戌的绳长len5
由条件可得 len1*2+len2 = len
len2*3+len3 = len
len3*4+len4 = len
len4*5+len5 = len
len5*6+len1 = len
依次把len1,len2,len3,len4,len5代表的绳长求出
len1 = len2+len3/2
len2 = len3+len4/3
len3 =len4+len5/4
len4 = len5+len1/5
int main() {
int len1, len2, len3, len4, len5, len, flag;
flag = 1;
len5 = 0;
while (flag)
{
len5 += 4;
len1 = 0;
while (flag)
{
len1 += 5;
len4 = len5 + len1 / 5;
len3 = len4 + len5 / 4;
if (len3 % 2) {
continue;
}
if (len4 % 3) {
continue;
}
len2 = len3 + len4 / 3;
if (len2 + len3 / 2 < len1)
break;
if (len2 + len3 / 2 == len1)
flag = 0;
}
}
len2 = 2 * len1 + len2;
printf("长度为\n");
printf("甲长度为%d\n",len1);
printf("乙长度为%d\n",len2);
printf("丙长度为%d\n",len3);
printf("丁长度为%d\n",len4);
printf("戊长度为%d\n",len5);
system("PAUSE");
return 0;
}
鸡兔同笼
“今有鸡兔同笼,上有三十五头,下有94足,问鸡兔各几何”
分析:鸡有两只脚,兔子有四只脚,因此可得二元一次方程组
设鸡为X,兔子为Y
X + Y = 35
2X + 4Y = 94
int main(){
int head,foot,chook,rabbit;
printf("请输入鸡和兔子的头和脚数\n");
scanf("%d%d",&head,&foot);
for(chook =0;chook<=head;chook++){
rabbit = head-chook;
if(chook*2+rabbit*4==foot){
printf("鸡的数量:%d,兔子的数量%d",chook,rabbit);
}
}
}
猴子吃桃问题
一只猴子摘了一堆桃子它每天吃了其中的一半然后在多吃了一个,直到第十天,他发现只有一个桃子了,问第一天摘了多少个桃子
分析:a10 = 1
a9=(a10+1)*2
a8 =(a9 +1 )*2
........
我们使用递归函数来计算这种推算的问题
int peach(int n) {
if (n == 1)
return 1;
else
return (peach(n - 1) + 1) * 2; //前一天比后一天多一倍+1
}
int main() {
int days, sum;
printf("请输入天数\n");
scanf("%d", &days);
sum = peach(days);
printf("%d", sum);
system("PAUSE");
return 0;
}