C语言 练习题 老师分糖果

问题描述:
幼儿园老师将糖果分成若干等份,让学生按任意次序领取,第1个领取的,得到1份加上剩余糖果的1/10;第2个领取的,得到2份加上剩余糖果的1/10;第3个领取的,得到3份加上剩余糖果的1/10,…依次类推。问共有多少个学生?老师将糖果分成了多少等份?
思路描述:从逻辑角度考察:从部分推整体;而这种 仅仅知道 判断条件(在程序代码中的三个if语句) 和 循环 的问题 最常用的是试数法 或者 叫 穷举法
这道题 或许 在刚刚 读完题时 一头雾水 (我第一次做时 连题目都没读懂呢,嘻嘻) 但是呢 虽然没有一口气做出来。但是我们可以 进行分析,逐个破解。
1、使用 穷举法 那么 穷举的对象 自然是 糖果 份数(如果是学生的话,题目条件难以利用)糖果 至少11份;
2、学生是 任意排序的 也就是说 任意 一位 在 任何的顺序中得到的糖果数 以及 与其他学生 所得的份数是一致的 。那好 设置两个变量 将 两种情形的 数据进行 比较,如果相等 那么该数 是符合题意的。
3、因为 sum1 是(n+9)/10 的 此时,剩下的份数为:n-(n+9)/10= (9n-9)/10.
那么sum2 便是 sum2=2+ ((9n-9)/10-2)*1/10,化简后为sum2= (9n+171)/100。

#include <stdio.h>
void main()
{
	int n;   // 定义整型变量 n 表示糖果个数
;	float sum1,sum2;	//定义浮点型变量 任意两个学生 所得到的的糖果份数
	for (n=11;;n++)	//糖果 至少是11 份 每次循环 叠加 1 进行试数
	{
		sum1 = (n+9)/10;// 化简前:sum1=1 + (n-1)*1/10
		sum2 = (9*n+171)/100.0;//化简前:sum2=2+ ((9n-9)/10-2)*1/10
		if (sum1 !=(int)sum1)
		continue;
		if (sum2 != (int)sum2)
		continue;
		if (sum1!=sum2)
		break;
	}
	printf("学生一共有 %d 人,糖果份数有 %d 份 ",(int)(n/sum1),n);
}

这是程序运行截图在这里插入图片描述

发布了26 篇原创文章 · 获赞 1 · 访问量 971

猜你喜欢

转载自blog.csdn.net/myxk_/article/details/103648933
今日推荐