初入C语言——循环结构经典题型讲解(二)(水仙花数、古代《张丘建算经》百鸡问题、输出九九乘法表、穷举法找车牌号)

本文介绍了编程练习,包括计算水仙花数(三位数各位立方和等于本身)、解百鸡问题(用穷举法购买鸡的组合)、输出九九乘法表以及根据车辆特征推断车号。这些题目强调了循环结构和实际问题的编程应用。
摘要由CSDN通过智能技术生成


前言

今天将继续巩固循环结构,下面的例题更加经典也更贴合实际,是期末考试重点内容。
像水仙花数、百鸡问题、九九乘法表都是耳熟能详的问题,越基础越重要。


一、水仙花数是指各位数字的立方和等于该数本身的三位数。请编程计算并输出所有的水仙花数。

**输出格式要求:”%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;
}

运行结果:
在这里插入图片描述


总结:

循环结构中一些问题解决的办法要稍加记忆,不然考试时一紧张会频频出错。不要抵触靠记忆的方法做题,一定是自己先理解,再去模仿,再理解,当积累到一定程度才会增长为自己的能力,这就是收获。

  • 32
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值