文章目录
- 前言
- 一、水仙花数是指各位数字的立方和等于该数本身的三位数。请编程计算并输出所有的水仙花数。
- 二、古代《张丘建算经》中有一道百鸡问题:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?其意为:公鸡每只5元,母鸡每只3元,小鸡3只1元。请用穷举法编程计算,若用100元买100只鸡,则公鸡、母鸡和小鸡各能买多少只。
- 三.请按如下形式编程输出九九乘法表。
- 四.一辆卡车违反了交通规则,撞人后逃逸。现场有三人目击了该事件,但都没有记住车号,只记住车号的一些特征。甲说:车号的前两位数字是相同的;乙说:车号的后两位数字是相同的,但与前两位不同;丙是位数学家,他说:4位的车号正好是一个整数的平方。请根据以上线索协助警方找出车号,以便尽快破案,抓住交通肇事者。
- 总结:
前言
今天将继续巩固循环结构,下面的例题更加经典也更贴合实际,是期末考试重点内容。
像水仙花数、百鸡问题、九九乘法表都是耳熟能详的问题,越基础越重要。
一、水仙花数是指各位数字的立方和等于该数本身的三位数。请编程计算并输出所有的水仙花数。
**输出格式要求:”%6d”
运行结果:
解答:
分析:重点在于如何实现将三位数的个位十位百位拆分出来(详见代码中的注释)
代码如下:
#include<stdio.h>
int main()
{int x,a,b,c;
for(a=0,b=0,c=0,x=100;x<=999;x++) //让所有的三位数都循环一遍
{
int a=x%10; // 求出个位上的数
int b=(x/10)%10; // 求出十位上的数
int c=(x/100); // 求出百位上的数
if(x==a*a*a+b*b*b+c*c*c)
printf("%6d",x);
}
return 0;
}
运行结果:
二、古代《张丘建算经》中有一道百鸡问题:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?其意为:公鸡每只5元,母鸡每只3元,小鸡3只1元。请用穷举法编程计算,若用100元买100只鸡,则公鸡、母鸡和小鸡各能买多少只。
**输出格式要求:
标题行"Cock\tHen\tChick\n"
数据行"%d\t%d\t%d\n"
参考结果:
解答:
分析:这道题可以先大概口算一下,用100元,假设全买公鸡最多能买20只,假设全买母鸡最多能买33只,假设全买小鸡最多能买300只。所以,以此来确定循环的结束条件。三者采用嵌套for循环的方法来实现解题。至于谁嵌套在谁里面无所谓,结果都一样。并且小鸡只能三只一起买,所以一定要是3的整数倍,否则得出的结果会多出好几种情况。
代码如下:
#include<stdio.h>
int main()
{
int Chick, Cock, Hen;
printf("Cock\tHen\tChick\n");
for (Chick = 0; Chick <= 300; Chick++) //300是因为总共100元,全买小鸡最多300只
{
for (Cock = 0; Cock <= 20; Cock++) //全买公鸡最多能买20只
{
for (Hen = 0; Hen <= 33; Hen++) //全买母鸡最多能买33只
{
if ((Cock + Hen + Chick) == 100 && (Cock * 5 + Hen * 3 + Chick / 3) == 100 && Chick % 3 == 0)
printf("%d\t%d\t%d\n", Cock, Hen, Chick);
}
}
}
return 0;
}
运行结果:
三.请按如下形式编程输出九九乘法表。
解答:
分析:一行为一次循环,分别设出i 表示行数,j 表示列数来实现这种形式的乘法表输出。
代码如下(示例):
#include<stdio.h>
int main()
{
int i,j;
for(i=1;i<10;i++)
{
printf("%4d",i);
}
printf("\n");
for(i=1;i<10;i++)
{
printf("%4c",'-');
}
printf("\n");
for(i=1;i<10;i++) //此处可将 i、j 看做表示行数和列数理解
{
for(j=1;j<i;j++)
{
printf("%4c",' ');
}
for(j=i;j<10;j++)
{
printf("%4d",i*j);
}
printf("\n");
}
return 0;
}
运行结果:
四.一辆卡车违反了交通规则,撞人后逃逸。现场有三人目击了该事件,但都没有记住车号,只记住车号的一些特征。甲说:车号的前两位数字是相同的;乙说:车号的后两位数字是相同的,但与前两位不同;丙是位数学家,他说:4位的车号正好是一个整数的平方。请根据以上线索协助警方找出车号,以便尽快破案,抓住交通肇事者。
**无输入提示信息和输入数据
**输出格式要求:“k=%d,m=%d\n”
运行结果:
解答:
分析: 假 设 这 个 4 位 数 的 前 两 位 数 字 是 i, 后 两 位 数 字 是 j, 则 这 个 4 位数 k = i* 1000+i* 100+j* 10+j。其中i和j都在0~9之间变化。此外,k是一个整数m的平方。因此,可采用穷举法验证k与m* m是否相等,直到找到与m* m相等的k值为止。
代码如下:
#include<stdio.h>
int main()
{
int i, j, k=0,m;
for (m = 31; m <= 100; m++)//m=31是因为k是个四位数,且k=m*m,所以m最小只需要从31开始即可,
//从1开始也行但没必要。
{
for (i = 0; i <= 9; i++)
{
for (j = 0; j <= 9; j++)
{
k =i * 1000 + i * 100 + j * 10 + j;
if (k == m * m )
printf("k=%d,m=%d\n", k, m);
}
}
}
return 0;
}
运行结果:
总结:
循环结构中一些问题解决的办法要稍加记忆,不然考试时一紧张会频频出错。不要抵触靠记忆的方法做题,一定是自己先理解,再去模仿,再理解,当积累到一定程度才会增长为自己的能力,这就是收获。