题目21:
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
思路:
- 设当天的桃子数为x,前一天的桃子数为y
- x=y*1/2-1,y=2(x+1)。
- 根据第十天还剩一个桃子可以推算出第一天的桃子总数。
代码:
#include"stdio.h"
int main()
{
int a=1,i,s=0;
for(i=0;i<9;i++)
{
a=2*(a+1);
}
printf("%d",a);
}
结果:
题目22:
两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
思路:
- 设出a,b,c对战的人且对战人员不相同
- 根据题设假定进行排除决定出比赛名单
代码:
#include"stdio.h"
int main()
{
char m,n,k;
for(m='x';m<='z';m++)
{
for(n='x';n<='z';n++)
{
for(k='x';k<='z';k++)
{
if(k!=m&&k!=n&&m!=n&&k!='x'&&k!='z'&&m!='x')
{
printf("a--%c\tb--%c\tc--%c",m,n,k);
}
}
}
}
return 0;
}
结果:
题目23:
打印出如下图案(菱形)。
*
***
*****
*******
*****
***
*
思路:
- 先算空格,再算*的个数
- 找出上面两个与行数的关系即可解题。
代码:
#include"stdio.h"
int main()
{
int i,j,k;
for(i=0;i<4;i++)
{
for(j=0;j<=3-i;j++)
printf(" ");
for(k=0;k<2*i+1;k++)
printf("*");
printf("\n");
}
for(i=2;i>=0;i--)
{
for(j=0;j<=3-i;j++)
printf(" ");
for(k=0;k<2*i+1;k++)
printf("*");
printf("\n");
}
return 0;
}
结果:
题目24:
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
思路:
- 观察数列可以看出分子变成了下一项的分母,而下一项的分子是前一项的分子分母之和。
- 算出前二十项之和即可。
代码:
#include"stdio.h"
int main()
{
float i,j,s,t;
int k;
i=2;
j=1;
for(k=0;k<20;k++)
{
s=s+i/j;
t=i;
i=i+j;
j=t;
}
printf("%f",s);
}
结果:
题目25:
求1+2!+3!+…+20!的和。
思路:
- 先求阶乘,再求累加。
- 位数比较大,需要用long long。
代码:
m#include"stdio.h"
int main()
{
int i,j;
long long s,t=0;
for(i=1;i<=20;i++)
{
s=1;
for(j=1;j<=i;j++)
{
s=s*j;
}
t+=s;
}
printf("%lld",t);
}