亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

數學黑洞c++編程題,用數組排列過后怎么循環下去,有沒有實例,謝謝?

數學黑洞c++編程題,用數組排列過后怎么循環下去,有沒有實例,謝謝?

C C++
柔情似水的眼眸3611166 2016-07-20 16:25:18
“數學黑洞”:任意一個4位自然數,,,形成一個最大數和一個最小數,之后,兩數相減,其差仍然為一個自然數。重復進行上述運算,會發現一個神秘的數。請找出該神秘數,并對所有4位自然數進行驗證。
查看完整描述

1 回答

?
源小猿

TA貢獻9條經驗 獲得超1個贊

#include <stdio.h>

int main(void)
{
??? int a=0;? //用于獲取輸入的數字
??? int b[4]={0};? //用于保存每個位
??? int c=0;? //用于排序時暫存
??? int max=0,min=0;? //保存最大最小值
???
??? printf("請輸入一個四位數字:");
??? scanf("%d",&a);
???
??? if(a>=1000&&a<=9999)? //判斷輸入的值是否過大或過小
??? {
??? while(a>=10)
??? {
??? b[0]=a/1000;
??? b[1]=(a%1000)/100;
??? b[2]=(a%100)/10;
??? b[3]=a%10;
???
??? for (int i=0;i<3;i++)? //由小到大排序
??? {
??????? for (int j=i+1;j<4;j++)
??????? {
??????????? if (b[i]>b[j])
??????????? {
??????????????? c=b[i];
??????????????? b[i]=b[j];
??????????????? b[j]=c;
??????????? }
??????? }
??? }
??? min=b[0]*1000+b[1]*100+b[2]*10+b[3];
??? max=b[3]*1000+b[2]*100+b[1]*10+b[0];
???
??? a=max-min;? //差值保存到a中便于while檢查
??? }
??? }
??? printf("這個數字為:%d",a);
??? return 0;
}

這是我的看法,我沒有編譯,編譯器好像出了點小問題,你自己試試看,你說測試所有四位數字的話就加一個for循環,挨個把值附給a應該就可以吧

查看完整回答
反對 回復 2016-07-20
  • 柔情似水的眼眸3611166
    柔情似水的眼眸3611166
    好的!謝謝~
  • 源小猿
    源小猿
    好像有點問題,while的條件判斷表達式不能這樣,會無限循環,還有那個取每位數的地方,那里應該是復制出問題了,反正就是先取余再除,就可以得到每位數值,至于while表達式,可以再聲明一個變量保存上一次計算的差值,然后while來檢查兩次差值是否相同,相同就退出循環就可以了吧
  • 源小猿
    源小猿
    好像有點問題,while的條件判斷表達式不能這樣,會無限循環,還有那個取每位數的地方,那里應該是復制出問題了,反正就是先取余再除,就可以得到每位數值,至于while表達式,可以再聲明一個變量保存上一次計算的差值,然后while來檢查兩次差值是否相同,相同就退出循環就可以了吧
  • 1 回答
  • 0 關注
  • 1838 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號