題目 第一次做全英文編程題(辭彙量嚴重不足,還需多記單詞); 題目的大致意思就是說:輸入一個不超過20位的整數,將這個數乘以2,比較計算前和計算後的結果是否滿足題目的要求, 這個要求具體是指判斷組成這兩個數的具體數字出現的次數是否相等,例如:這個數為123456789,它乘以2之後得到2469135 ...
題目
第一次做全英文編程題(辭彙量嚴重不足,還需多記單詞);
題目的大致意思就是說:輸入一個不超過20位的整數,將這個數乘以2,比較計算前和計算後的結果是否滿足題目的要求,
這個要求具體是指判斷組成這兩個數的具體數字出現的次數是否相等,例如:這個數為123456789,它乘以2之後得到246913578,
組成這兩個數的數字為1、2、3、4、5、6、7、8、9,並且他們在123456789和246913578中出現的次數相等,所以滿足題目的要求。
代碼(思路在註釋中)
#include<stdio.h> void printArray(int nums[],int len); int main() { //由於數字的位數比較長就算使用long long型,位數還是不夠用 //所以需要用字元串來存儲用戶輸入的數字 char str[20]; //字元串轉換為的數組,存儲用戶輸入的整型數字 int nums[20]; //原有的數組乘以2,存儲數字計算後的結果 int nums1[20]; //用於判斷計算前後的數字特征是否一致 //也就是計算前後每個數字出現的次數是否一樣 int a[10] = {0}; int b[10] = {0}; //定義迴圈變數 int i = 0, j = 0; //定義數組長度,最後的判斷標誌 int len = 0, flag = 0; //接收用戶輸入的字元串 scanf("%s",str); //通過迴圈,每一位數字都乘以2,得到計算後的結果 while(str[i]!='\0'){ nums[i] = str[i]-'0'; nums1[i] = nums[i]*2; i++; len++; } //判斷計算後的數組是否有進位 //如果有進位,則需要調整數組 for(i = len-1; i >= 1;i--) { if(nums1[i] >= 10){ nums1[i] = nums1[i] - 10; nums1[i-1] = nums1[i-1] + 1; } } //最簡單的一種情況 //計算前後位數不同,直接否定 if(nums1[0] >= 10){ printf("No\n"); printArray(nums1,len); } //計算前後位數相同,比較各個數字出現的次數是否相同 else{ //統計計算前的數組中0~9出現的次數 for(i = 0; i < len; i++){ for(j = 0;j < 10; j++){ if(nums[i] == j) a[j]++; } } //統計計算後的數組中0~9出現的次數 for(i = 0; i < len; i++){ for(j = 0; j < 10 ; j++){ if(nums1[i] == j) b[j]++; } } //最後判斷a,b兩數組是否完全相同 //相同 ==> Yes //不同 ==> No for(i = 0; i < 10; i++){ if(a[i] != b[i]){ flag = 1; break; } } if(flag == 0) printf("Yes\n"); else printf("No\n"); printArray(nums1,len); } return 0; } //封裝了一個用於列印數組的函數 void printArray(int nums[],int len) { int i = 0; for(i = 0; i < len; i++) { printf("%d",nums[i]); } printf("\n"); }