1. 程式人生 > >找“異數”(C)

找“異數”(C)

+= define 一行 none har closed view 輸出 img

定義“異數”:數值序列中包含2~16進制整數,如果序列中有一個數,與序列中其他任何一個數大小都不相等,這個數叫做“異數”

輸入:輸入數值序列i行(0<i),每一行分別是進制和數值,以"#"分割。如:n#m,n是整數,代表n進制,m是n進制下的數值。輸入序列以結束符“END”結束

輸出:輸出j行(0<j<i),每一行都是輸入序列的異數。要求:按照輸入系列的原序輸出;如果沒有異數,輸出字符串"None";結束符"END"不用輸出

example:

輸入:10#2333

   8#4434

   2#100100011101

   16#91D

輸出:8#4434

技術分享圖片
 1 #include<stdio.h>
 2
#include<string.h> 3 #define Row 20 4 #define Column 20 5 6 char a[Row][Column]; 7 int b[Row]; 8 9 int Read(void) //將輸入各行n#m以字符格式存入二維數組 a[][] 10 { 11 int i=0; 12 while(1) 13 { 14 scanf("%s",a[i]); 15 if(strcmp(a[i],"END")==0) 16 break; 17 else
18 i++; 19 } 20 return i; 21 } 22 23 int Converse(void) //將a[][]中各行轉換為十進制放入b[] 24 { 25 int r=Read(); 26 int i,j; 27 int len,x; 28 int k,t; 29 for(i=0;i<r;i++) 30 { 31 int n=0,m=0; 32 len=strlen(a[i]); 33 for(j=0;j<len;j++) 34 {
35 if(a[i][j]==#) 36 x=j; 37 } 38 for(k=0;k<x;k++) 39 { 40 n*=10; 41 n+=(a[i][k]-0); 42 } 43 for(t=x+1;t<len;t++) 44 { 45 m*=n; 46 if(a[i][t]-0>9) 47 m+=(a[i][t]-A+10); 48 else 49 m+=(a[i][t]-0); 50 } 51 b[i]=m; 52 } 53 return r; 54 } 55 56 void Check(void) //在b[]中找出異數輸出,沒有則輸出None 57 { 58 int r=Converse(); 59 int k,t; 60 if(r!=1) 61 { 62 int n=0; 63 for(k=0;k<r;k++) 64 { 65 for(t=0;t<r;t++) 66 { 67 if(k!=t && b[k]==b[t]) 68 { 69 n+=1; 70 break; 71 } 72 } 73 if(t==r) 74 printf("%s\n",a[k]); 75 } 76 if(n==r) 77 printf("%s\n","None"); 78 } 79 else 80 printf("%s\n",a[0]); 81 } 82 83 int main(void) 84 { 85 Check(); 86 return 0; 87 }
View Code

找“異數”(C)