2017年11月26日 星期日

[C_ST26-易] 信用卡卡號檢查(C++)

[C_ST26-易] 信用卡卡號檢查

問題描述 :
已知某信用卡號公司的信用卡卡號的規則為16個數(共1~16位),奇數位乘上1,偶數位乘上2,得到16個數,再將這16個數分別把十位數加上個位數(Ex:15->1+5=6),再產生16個新的數字,最後把這16個數字加總,若能夠被10整除則為正確卡號。

輸入說明 :
輸入一筆信用卡卡號資料。
※長度<=20
輸出說明 :
若輸入資料並非16位數則輸出「Error」,若檢查結果為正確的信用卡卡號則輸出Y,反之輸出N。
範例 :

Sample Input:Sample Output:
4048726835405438Y



  1. #include <iostream>  
  2. #include <string.h>  
  3. #include <cmath>  
  4. using namespace std;  
  5.   
  6. int main() {  
  7.     // [C_ST26-易] 信用卡卡號檢查  
  8.     string card_num;  
  9.     int len = 0;  
  10.     while(cin >> card_num)  
  11.     {  
  12.         int sum = 0; //最後16位的總和(除10的那個數)  
  13.         len = card_num.size(); //字串長度,判斷幾位數  
  14.         char card[len];  //string to char,存放字元陣列card裡  
  15.         bool Err = true; //旗標值  
  16.         strcpy(card, card_num.c_str()); //string to char  
  17.         if(len != 16) //不是16位,輸出Error  
  18.         {  
  19.             cout << "Error" << endl;  
  20.         }  
  21.         else //是16位  
  22.         {  
  23.             for(int i = 1;i <= len;i++) //項數  
  24.             {  
  25.                 if(48 <= card[i-1] && card[i-1] <= 57) //判斷是否是數字,在此範圍內的是ASCII的0~9  
  26.                 {  
  27.                     if(i % 2 != 0)//奇數  
  28.                     {  
  29.                         sum = sum + card[i-1]; //加總  
  30.                     }  
  31.                     else //偶數  
  32.                     {  
  33.                         //注意現在的card[i]是char,char to int 就是以下方法  
  34.                         card[i-1] = floor((((int)card[i-1]-48)*2)/10)+((((int)card[i-1]-48))*2)%10;  
  35.                         sum = sum + ((int)card[i-1]-48);  
  36.                     }  
  37.                 }  
  38.                 else  
  39.                 {  
  40.                     cout << "Error" << endl;  
  41.                     Err = false;  
  42.                     break;  
  43.                 }  
  44.             }  
  45.             if(Err == true)  
  46.             {  
  47.                 if(sum % 10 == 0)  
  48.                 {  
  49.                     cout << "Y" << endl;  
  50.                 }  
  51.                 else  
  52.                 {  
  53.                     cout << "N" << endl;  
  54.                 }  
  55.             }  
  56.             else  
  57.             {  
  58.                 break;  
  59.             }  
  60.         }  
  61.     }  
  62.     return 0;  
  63. }  

[C_ST63-易] 尋找單字中的母音字母數量(C++)

[C_ST63-易] 尋找單字中的母音字母數量

問題描述:
英文字母中有五個母音,分別是 a 、 e 、 i 、 o 、 u ,請寫一個程式,讓使用者可以輸入若干單字,並顯示這些單字內分別有幾個母音字母 ( 不分大小寫 )
輸入說明:
先輸入欲輸入的單字數量 N ,然後輸入單字,輸入完後按 Enter 及可以輸入下一個單字一直至輸入完畢。
輸出說明:
分別列出每個單字有多少個母音字母。
範例:
Sample Input:Sample Output:
1
abandon
abandon 3
輸出輸入測試資料 各五筆
inputoutput
2
machine
logistics
machine 3
logistics 3
2
extinguisher
distributor
extinguisher 5
distributor 4
3
facility
hazard
enhance
facility 3
hazard 2
enhance 3
1
customize
customize 4
4
defect
cylinder
component
automatic
defect 2
cylinder 2
component 3
automatic 5



  1. #include <iostream>  
  2. #include <ctype.h>  
  3. #include <stdio.h>  
  4. #include <string.h>  
  5. using namespace std;  
  6.   
  7. int main() {  
  8.     // [C_ST63-易] 尋找單字中的母音字母數量  
  9.     int N;  
  10.     int count = 0;;  
  11.     string vowel[5] = {"a", "e", "i", "o", "u"};  
  12.     string str_original; //原本的字串  
  13.     while(cin >> N)  
  14.     {  
  15.         for(int i = 0;i < N;i++)  
  16.         {  
  17.             cin >> str_original; //輸入原本的字串  
  18.             int len = str_original.size();   
  19.             //原本的字串的長度  
  20.             char original[len]; //原本的字元陣列  
  21.             char variety[len];  //變化後的字元陣列  
  22.             strcpy(original, str_original.c_str());    
  23.             //string to char  
  24.             //把原本的字元陣列統一轉成小寫,放入變化後的字元陣列內  
  25.             for(int j = 0; j < len;j++)  
  26.             {  
  27.                 variety[j] = (char)tolower(original[j]);  
  28.             }  
  29.             string str_variety(variety);//char to string  
  30.             //計算數量  
  31.             for(int j = 0; j < 5;j++) //五個母音  
  32.             {  
  33.                 int fpos = 0;  
  34.                 string v = vowel[j];  
  35.                 while(1)  
  36.                 {  
  37.                     fpos = str_variety.find(v, fpos);  
  38.                     if (fpos != -1) //fpos != string::npos  
  39.                     {  
  40.                         fpos = fpos + v.size();  
  41.                         count++;  
  42.                     }  
  43.                     else  
  44.                     {  
  45.                         break;  
  46.                     }  
  47.                 }  
  48.             }  
  49.             cout << str_original << " " << count << endl;  
  50.             count = 0;  
  51.         }  
  52.     }  
  53.     return 0;  
  54. }  

[C_ST30-中] 尋找並取代字(C++)

[C_ST30-中] 尋找並取代字

問題描述 :
給予三個英文字串,由英文大小寫字母構成,其中都可能有空白。 第一個字串是目的字串,接著的運作都是針對此字串。 第二個字串是要在第一個字串中尋找並刪除的字串, 第三個字串是要用來取代第二個字串。 結果為第一個字串中刪除了所有第二個字串並用第三個字串取代。

輸入說明 :
輸入有三列長度在128個字元內的字串,第一列為第一個目的字串, 第二列為要尋找的字串,第三列為取代第二個字串的字串。

輸出說明 :
經尋找並取代後的第一個目的字串。

範例 :

Sample Input:Sample Output:
a quick brown fox jump over the fence
fox
wolf
a quick brown wolf jump over the fence

  1. #include <iostream>  
  2. #include<iomanip>    
  3. #include<string>  
  4.    
  5. using namespace std;  
  6.    
  7. int main() {  
  8.     // [C_ST41-中] 字串取代  
  9.     string P, Q, R;  
  10.     //將字串P中所有出現字串Q的部分取代成字串R  
  11.     getline(cin, P);  
  12.     getline(cin, Q);  
  13.     getline(cin, R);  
  14.     int fpos = 0;  
  15.     while(1)  
  16.     {  
  17.         fpos = P.find(Q, fpos); //在P字串中尋找子字串Q  
  18.         if(fpos != string::npos)  
  19.         {  
  20.             P.replace(fpos, Q.size(), R); //取代  
  21.             fpos = fpos + Q.size();  
  22.         }  
  23.         else  //如果找不到就跳出迴圈  
  24.         {  
  25.             break;  
  26.         }  
  27.     }  
  28.     cout << P << endl;  
  29.     return 0;  
  30. }