找回密碼 或 安全提問
 註冊
|註冊|登錄

伊莉討論區

搜索
感激所有對伊莉作出奉獻的人尊貴會員無限看帖不用回覆你準備好成為出色的版主了嗎?
mega無碼office三上悠亜overlord中文鬼滅之刃無碼 ge
有馬美玖[3d]waifu恋乳オー夏筠婷エルフ電車de痴

休閒聊天興趣交流學術文化旅遊交流飲食交流家庭事務PC GAMETV GAME
熱門線上其他線上感情感性寵物交流家族門派動漫交流貼圖分享BL/GL
音樂世界影視娛樂女性頻道潮流資訊BT下載區GB下載區下載分享短片
電腦資訊數碼產品手機交流交易廣場網站事務長篇小說體育運動時事經濟
上班一族博彩娛樂

[繁]魔法科高中的劣等

[簡]單人房、日照一般

[繁]老夫老妻重返青春

[繁]為美好的世界獻上

[繁]怪人的沙拉碗07-

[繁]月光下的異世界之
C & C++ 語言C# 語言Visual Basic 語言PHP 語言JAVA 語言
查看: 3065|回復: 4
打印上一主題下一主題

[問題]期末考題檢討[複製鏈接]

Rank: 2Rank: 2

帖子
496
積分
573 點
潛水值
19090 米
跳轉到指定樓層
樓主
發表於 2017-1-5 07:16 PM|只看該作者|倒序瀏覽
本帖最後由 zz2242zz 於 2017-1-5 07:26 PM 編輯

這次考試我又有一題不會做,想請教各位。

印象中題目是這樣的:設計出一支程式,能反覆輸入一整數值,直到輸入的值為-1或999則停止,並顯示該值有哪些數字重複出現了幾次。

範例:
輸入一整數值:221330
2重複出現2次
3重複出現2次
  1. while(1)
  2.     {
  3.         cout<<"輸入一個整數值:" ;
  4.         cin>>n ;
  5.         if(n==-1||n==999)
  6.         {
  7.             cout<<"第4小題結束!!!" ;
  8.             break ;
  9.         }
  10.         if(n<0)
  11.             n*=-1 ;
  12.         m=1 ;
  13.         y=1 ;
  14.         while(1)
  15.         {
  16.             m*=10 ;
  17.             x=n/m ;
  18.             if(x==0)
  19.             {
  20.                     break ;
  21.                         }
  22.             y++ ;
  23.         }
  24.     }
複製代碼
這是考完後想出來的,先找出n是幾位數,再來處理有幾個數字重複出現,但這樣好像要宣告很多變數......。
這學期學到的東西:
cout、cin、for、while、do...while、/* */、if、if...else、break、continue、sqrt()
=、%、加減乘除跟括號、算數指定運算子、關係運算子、setw()、巢狀迴圈(跟if)、邏輯運算子

如果可以請盡量用我學過的東西......

...
瀏覽完整內容,請先 註冊登入會員
分享分享0收藏收藏1支持支持0
若對尊貴或贊助會員有任何疑問,歡迎向我們查詢。我們的即時通或MSN: admin@eyny.com

使用道具檢舉

Rank: 2Rank: 2

帖子
474
積分
967 點
潛水值
31789 米
頭香
發表於 2017-1-6 10:01 PM|只看該作者
分享使你變得更實在,可以使其他人感到快樂,分享是我們的動力。今天就來分享你的資訊、圖片或檔案吧。
老實說~看完您的題目我嘗試寫了一下~之後看您的程式碼...貌似沒甚麼兩樣....只是您的y是怎麼回事?
因為您沒提到您是否有學到陣列....所以我給了兩版...另外一版用switch....雖然您也沒說您是否有學過switch...只是...因為我實在不想瘋狂的打else if...上網去看一下switch和if else if就知道關聯與差別了
陣列版...如下
  1. int main()
  2. {
  3.         int sum_buf[10] = {  } ;        //初始化而沒給值則為0...至少我在VC++上是如此~看不慣則用for迴圈歸0~將來懂memset這函式時就不用靠for了
  4.         //另外備註~或許您已經看過有人是寫 { 0 }...其實他們也僅僅只是定義了陣列第一個空間值為0...後面依舊沒去定義
  5.         int input;
  6.         int ans;

  7.         while(true)
  8.         {
  9.                 cout << "輸入一個整數值:" ;
  10.                 cin >> input ;

  11.                 if( input==-1 || input==999 )
  12.                 {
  13.                         cout<<"收工!下班\n";
  14.                         break;
  15.                 }

  16.                 if( input < 0 )
  17.                 {
  18.                         input *= -1;
  19.                 }

  20.                 do
  21.                 {
  22.                         ans = input % 10;
  23.                         sum_buf[ ans ] ++;
  24.                         input /= 10;
  25.                 }while( input != 0 );

  26.                 for( int i = 0 ; i < 10 ; i++ )
  27.                 {
  28.                         cout<< i << " 出現了 " << sum_buf[ i ] << " 次\n" ;
  29.                         sum_buf[i] = 0;        //順便做清空的動作
  30.                 }
  31.         }
  32. }
複製代碼
switch版
  1. int main()
  2. {
  3.         int a0 = 0 , a1 = 0 , a2 = 0 , a3 = 0 , a4 = 0 , a5 = 0 , a6 = 0 , a7 = 0 , a8 = 0 , a9 = 0 ;
  4.         int input;

  5.         while(true)
  6.         {
  7.                 cout << "輸入一個整數值:" ;
  8.                 cin >> input ;

  9.                 if( input==-1 || input==999 )
  10.                 {
  11.                         cout<<"收工!下班\n";
  12.                         break;
  13.                 }

  14.                 if( input < 0 )
  15.                 {
  16.                         input *= -1;
  17.                 }

  18.                 do
  19.                 {
  20.                         switch( input % 10 )
  21.                         {
  22.                         case 0:
  23.                                 a0++;
  24.                                 break;
  25.                         case 1:
  26.                                 a1++;
  27.                                 break;
  28.                         case 2:
  29.                                 a2++;
  30.                                 break;
  31.                         case 3:
  32.                                 a3++;
  33.                                 break;
  34.                         case 4:
  35.                                 a4++;
  36.                                 break;
  37.                         case 5:
  38.                                 a5++;
  39.                                 break;
  40.                         case 6:
  41.                                 a6++;
  42.                                 break;
  43.                         case 7:
  44.                                 a7++;
  45.                                 break;
  46.                         case 8:
  47.                                 a8++;
  48.                                 break;
  49.                         case 9:
  50.                                 a9++;
  51.                                 break;
  52.                         }
  53.                         input /= 10;
  54.                 }while( input != 0 );

  55.                 for( int i = 0 ; i < 10 ; i++ )
  56.                 {
  57.                         cout << i << " 出現了 " ;
  58.                         switch( i )
  59.                         {
  60.                         case 0:
  61.                                 cout << a0;
  62.                                 a0 = 0 ;
  63.                                 break;
  64.                         case 1:
  65.                                 cout << a1;
  66.                                 a1 = 0 ;
  67.                                 break;
  68.                         case 2:
  69.                                 cout << a2;
  70.                                 a2 = 0 ;
  71.                                 break;
  72.                         case 3:
  73.                                 cout << a3;
  74.                                 a3 = 0 ;
  75.                                 break;
  76.                         case 4:
  77.                                 cout << a4;
  78.                                 a4 = 0 ;
  79.                                 break;
  80.                         case 5:
  81.                                 cout << a5;
  82.                                 a5 = 0 ;
  83.                                 break;
  84.                         case 6:
  85.                                 cout << a6;
  86.                                 a6 = 0 ;
  87.                                 break;
  88.                         case 7:
  89.                                 cout << a7;
  90.                                 a7 = 0 ;
  91.                                 break;
  92.                         case 8:
  93.                                 cout << a8;
  94.                                 a8 = 0 ;
  95.                                 break;
  96.                         case 9:
  97.                                 cout << a9;
  98.                                 a9 = 0 ;
  99.                                 break;
  100.                         }
  101.                         cout << " 次\n" ;
  102.                 }
  103.         }
  104. }
複製代碼
若是不想看到0次的數值就用if讓其不顯示吧
至於有否比您我想到更高竿的寫法~那肯定有~只是沒興趣在此墨跡...
瀏覽完整內容,請先 註冊登入會員

點評

zz2242zz y代表n是幾位數,想說這樣可能比較好求。老師看我們程度太差一直放慢進度,陣列跟switch都沒學過......。  發表於 2017-1-7 07:24 AM
如果發覺自己無法使用一些功能或出現問題,請按重新整理一次,並待所有網頁內容完全載入後5秒才進行操作。

使用道具檢舉

  尊貴會員

Melty Snow  雪靈

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

帖子
3224
積分
24365 點
潛水值
77390 米
3
發表於 2017-1-8 04:08 AM|只看該作者
若對尊貴或贊助會員有任何疑問,歡迎向我們查詢。我們的即時通或MSN: admin@eyny.com
如果不考慮 0 開頭的數字,像是 00123 的話

  1. #include <iostream>
  2. using namespace std;

  3. int main()
  4. {
  5.     int n;

  6.     while(cin >> n && n != -1 && n!= 999)
  7.     {
  8.         for(int i = 0 ; i < 10 ; ++i)
  9.         {
  10.             int m = n, cnt = 0;

  11.             while(m != 0)
  12.             {
  13.                 cnt += (m % 10) == i;
  14.                 m /= 10;
  15.             }
  16.             if(cnt > 1)
  17.                 cout << i << "重複出現" << cnt << "次\n";
  18.         }
  19.     }
  20.     return 0;
  21. }
複製代碼

...
瀏覽完整內容,請先 註冊登入會員

點評

zz2242zz 感謝回答。請問下第16列代表什麼意思?  發表於 2017-1-10 05:01 PM
Melty Snow [雪靈]
若瀏覽伊莉的時侯發生問題或不正常情況,請使用Internet Explorer(I.E)。

使用道具檢舉

Rank: 1

帖子
9
積分
31 點
潛水值
19660 米
4
發表於 2017-1-9 09:46 AM|只看該作者
本帖最後由 kiwis 於 2017-1-9 09:53 AM 編輯

直接用string來處理,加上一個紀錄用的 buffer 就可以很簡單的解決這個問題。
  1. #include <iostream>
  2. #include <string>

  3. using namespace std;

  4. void PrintResult(string& input)
  5. {
  6.         char* pInput = (char*) input.c_str();

  7.         unsigned char counter[10];                //紀錄 0~9 的出現次數,陣列的 index 就是數字
  8.         memset(counter, 0, 10);                   //一開始所有數字的出現次數為 0

  9.         for(int i(0); i<input.size(); ++i)
  10.         {
  11.                 counter[ (pInput[i]-48) ] ++;    //ASCII code - 48 = 數字,字串基本上是ASCII編碼
  12.         }

  13.         for(int j(0); j<10; ++j)
  14.         {
  15.                 if( counter[j] )
  16.                 {
  17.                         cout << "number: " << j << " repeated " << +counter[j] << " time(s)." << endl;
  18.                 }
  19.         }
  20. }

  21. int main(int argc, char* argv[])
  22. {

  23.         string str;
  24.         cin >> str;

  25.         while( strcmp("-1", str.c_str()) &&  strcmp("999", str.c_str()))
  26.         {
  27.                 PrintResult(str);
  28.                 cin >> str;
  29.         }

  30.         cout << "Terminated." << endl;
  31.         return 0;
  32. }
複製代碼
...
瀏覽完整內容,請先 註冊登入會員

點評

zz2242zz 感謝回答。  發表於 2017-1-10 05:04 PM
所有積分大於負-100的壞孩子,將可獲得重新機會成為懲罰生,權限跟幼兒生一樣。

使用道具檢舉

  尊貴會員

Melty Snow  雪靈

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

帖子
3224
積分
24365 點
潛水值
77390 米
5
發表於 2017-1-10 06:30 PM|只看該作者
如果你忘記伊莉的密碼,請在登入時按右邊出現的 '找回密碼'。輸入相關資料後送出,系統就會把密碼寄到你的E-Mail。
cnt += 0 或  cnt += 1 應該知道吧
boolean 做為整數運算時,false 為 0,true 為 1
(m % 10) == i 判斷末位數字是不是 i
是的話 cnt 值加 1,不是加 0
可以寫成
  1. if(m%10 == i)
  2. cnt++;
複製代碼





點評

zz2242zz 謝謝解惑。  發表於 2017-1-10 07:12 PM
Melty Snow [雪靈]
若對尊貴或贊助會員有任何疑問,歡迎向我們查詢。我們的即時通或MSN: admin@eyny.com

使用道具檢舉

您需要登錄後才可以回帖 登錄 | 註冊

Powered by Discuz!

© Comsenz Inc.

重要聲明:本討論區是以即時上載留言的方式運作,對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿上傳和撰寫 侵犯版權(未經授權)、粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。
回頂部