C语言:猜数字游戏——给“余”猜数

红太狼 2023-07-17 04:47 109阅读 0赞

猜数字游戏——给“余”猜数游戏

问题概述:
你心里先想好一个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. 算法的关键:找出余数与求解数之间的关系,建立问题的数学模型;
  2. 数学模型:
    (1)不难理解当s=u+3v+3w时,s除以3的余数与u除以3的余数相同;
    (2)对s=cu+3v+3w,当c除以3余数为1的数时, s除以3的余数与u除以3的余数相同。
  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的系数。
  4. 问题总结:
    (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。

代码示例:

  1. #include<stdio.h>
  2. #include <stdlib.h>
  3. int main( )
  4. {
  5. int a,b,c,d;
  6. printf("Please think of a number between 1 and 100.\n");
  7. printf("your number divided by 3 has a reminder of:");
  8. scanf("%d",&a);
  9. printf("Your number divided by 5 has a reminder of:");
  10. scanf("%d",&b);
  11. printf("Your number divided by 7 has a reminder of:");
  12. scanf("%d",&c);
  13. printf("Let think a moment,emmm--");
  14. d=70*a+21*b+15*c;
  15. while(d>105)
  16. d=d-105;
  17. printf("Oh,your number was %d\n",d);
  18. }

运行示例:
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDE3MDQyMA_size_16_color_FFFFFF_t_70

发表评论

表情:
评论列表 (有 0 条评论,109人围观)

还没有评论,来说两句吧...

相关阅读

    相关 c语言 数字游戏

    猜数字游戏是令游戏机随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Too big”),还是小了(“

    相关 C语言数字游戏

    游戏描述 系统随机产生一个1-100内的随机数,由玩家来猜。玩家输入不重复的1-100内的数字,按回车键后系统给出提示,提示猜的数字是偏大还是偏小,直到猜中系统产生的那个

    相关 C语言游戏

    系统随机产生四个不同的有序的数字 (从小到大排列),等待用户输入猜测的结果, 用A来表示数字正确且位置正确的个数 ,用B来表示数字正确但位置不正确的个数,给八次机会,猜中则游戏