【C】韓信點兵

來源:互聯網
上載者:User

標籤:

我姐給我出了一道題,讓我去編一個韓信點兵的程式

學了迴圈結構後,總算編出來了

警告!有大量膜法

 

 1 #include <stdio.h> 2  3 int main() 4 { 5       int A,a; 6       int B,b; 7       int C,c; 8       int D; 9     printf("有一數,除以\n");10 11     scanf("%d",&A);12     printf("餘\n");13     scanf("%d",&a);14 15     printf("除以\n");16     scanf("%d",&B);17     printf("餘\n");18     scanf("%d",&b);19 20     printf("除以\n");21     scanf("%d",&C);22     printf("餘\n");23     scanf("%d",&c);24 25 26         for(D=c; D%B != b; D += C);27         for(; D%A != a; D += A*C);28     printf("顯然地,這個數是%d\n",D);29     return 0;30 }

為了加入中文,沒有意義地寫了這麼長……

核心結構只是兩個for語句

26         for(D=c; D%B != b; D += C);27         for(; D%A != a; D += A*C);

大寫的ABC是除數,小寫abc是D除以它們的餘數

期間也因為中英文字元輸入混亂而被迫一個雙引號一個雙引號的改正

也有其他的基本語法錯誤,慢慢地改正

最終得到了正確的結果

但是

 

問題:

舉個例子

有一數

除8

餘3

除5

餘2

除7

餘3

猜猜結果會是多少?

227?

顯然程式將無限迴圈下去,直到D達到int的最大上限

讓我用手工推一下

D=3

D%5 =3 不等於2

D=10

D%5 =0

不等於2

D=17

D%5=2

第一步迴圈完成

進入第二個for語句

D%8=1

不等於3

D =17+7*8

D = 73

D%8 =1

不等於3

D = 129

D%8 = 1

等等,怎麼還是等於1?

我像個老人一樣的坐在床邊兒 沮喪了很久

無奈寫了另一個版本

 1 #include <stdio.h> 2 #include <stdlib.h> 3  4 int main() 5 { 6         int A,a; 7         int B,b; 8         int C,c; 9         int D;10         puts("今有一數");11 12         puts("除以");13         scanf("%d",&A);14         puts("餘");15         scanf("%d",&a);16 17         puts("除以");18         scanf("%d",&B);19         puts("餘");20         scanf("%d",&b);21 22         puts("除以");23         scanf("%d",&C);24         puts("餘");25         scanf("%d",&c);26 27 28                 for( D=0 ; D < A*B*C ; ++D )29                 {30                   if( D%A == a && D%B == b && D%C == c)31                         {32                         printf("顯然地,這個數是%d", D );33                         break ;34                         }35                 }36 37 38     return 0;39 }

採用窮舉果然比較穩妥,雖然比較慢

 

過了很久

我重新分析了一下第一個方法

顯然第一個for是要求一數模B餘b,模C餘c

然後第二個for是求該數在模B與C有b與c的同時模A餘a

但是

27      for(; D%A != a; D += A*C);

為什麼是 D+=A*C?

……………………

居然敗在了一個低級錯誤上

改為 D+= B*C後很簡單就排除了這個bug

………………

 

【C】韓信點兵

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.