C语言:猜数字游戏——给“余”猜数
猜数字游戏——给“余”猜数游戏
问题概述:
你心里先想好一个1~100之间的整数x,将它分别除以3、5和7并得到三个余数。你把这三个余数告诉计算机,计算机能马上猜出你心中的这个数。
游戏过程:
Please think of a number between 1 and 100
Your number divided by 3 has a remainder of?
Your number divided by 5 has a remainder of?
Your number divided by 7 has a remainder of?
Let think a moment,emmm–
Oh,your number was***
问题分析:
- 算法的关键:找出余数与求解数之间的关系,建立问题的数学模型;
- 数学模型:
(1)不难理解当s=u+3v+3w时,s除以3的余数与u除以3的余数相同;
(2)对s=cu+3v+3w,当c除以3余数为1的数时, s除以3的余数与u除以3的余数相同。 - 证明如下:
c 除以3余数为1,记c=3k+1,则s=u+3ku+3v+3w,由1)的结论,上述结论正确。 记a,b,c分别为所猜数据d除以3,5,7后的余数,则d=70a+21b+15c为问题的数学模型,其中70称作a的系数,21称作b的系数,15称作c的系数。 - 问题总结:
(1) b、c的系数能被3整除,且a的系数被3整除余1;这样d除以3的余数与a相同;
(2)a、c的系数能被5整除,且b的系数被5整除余1;这样d除以5的余数与b相同;
(3)a、b的系数能被7整除,且c的系数被7整除余1;这样d除以7的余数与c相同。
由此可见:
c的系数是3和5的最公倍数且被7整除余1,正好是15;
a的系数是7和5的最公倍数且被3整除余1,最小只能是70;
b的系数是7和3的最公倍数且被5整除余1,正好是21。
代码示例:
#include<stdio.h>
#include <stdlib.h>
int main( )
{
int a,b,c,d;
printf("Please think of a number between 1 and 100.\n");
printf("your number divided by 3 has a reminder of:");
scanf("%d",&a);
printf("Your number divided by 5 has a reminder of:");
scanf("%d",&b);
printf("Your number divided by 7 has a reminder of:");
scanf("%d",&c);
printf("Let think a moment,emmm--");
d=70*a+21*b+15*c;
while(d>105)
d=d-105;
printf("Oh,your number was %d\n",d);
}
运行示例:
还没有评论,来说两句吧...