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. 算法的關鍵:找出餘數與求解數之間的關係,建立問題的數學模型;
  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。

代碼示例:

#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);
}

運行示例:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章