首页 > 代码库 > CSDN第四届在线编程大赛2014初赛:带通配符的数

CSDN第四届在线编程大赛2014初赛:带通配符的数

题目要求:

输入参数:参数A,含有任意个数的?的数值字符串,如:12?4,?代表一位任意数
             参数B,不含?的数值字符串,长度与参数A一致
输出结果:参数A比参数B大的可能数值个数

输入样例
36?1?8
236428
8?3
910
?
5

输出样例
100
0
4

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. #define num_max_length 20  
  2. int main(void)  
  3. {   
  4.     char num1[num_max_length];  
  5.     char num2[num_max_length];  
  6.     int result_temp=0, result=0;  
  7.     int num_length=0, num_index=0;  
  8.     int flag=0;  
  9.   
  10.     while(1){  
  11.         memset(num1, 0, num_max_length);  
  12.         memset(num2, 0, num_max_length);  
  13.         result_temp=0;  
  14.         result = 0;  
  15.         flag = 0;  
  16.   
  17.         printf("参数A:");  
  18.         fgets(num1, num_max_length, stdin);  
  19.         if(memcmp(num1, "end", 3)==0) break;  
  20.         printf("参数B:");  
  21.         fgets(num2, num_max_length, stdin);  
  22.         if(memcmp(num2, "end", 3)==0) break;  
  23.         if((num_length=strlen(num1))!=strlen(num2)){  
  24.             printf("num1 num2 length not match\n");  
  25.             break;  
  26.         }  
  27.   
  28.         for(num_index=0; num_index<num_length; num_index++){  
  29.             if(num1[num_index]==‘?‘){  
  30.                 if(flag == 0)  
  31.                     result_temp = (int)(‘9‘-num2[num_index])+result_temp*10;  
  32.                 else  
  33.                     result_temp = result_temp*10;  
  34.             }  
  35.             else{  
  36.                 if(num1[num_index]==num2[num_index]){  
  37.                     continue;  
  38.                 }  
  39.                 else if(num1[num_index]<num2[num_index]){  
  40.                     //break;  
  41.                     if(flag == 0){  
  42.                         flag = 1;  
  43.                     }  
  44.                 }  
  45.                 else{  
  46.                     if(flag == 0){  
  47.                         flag = 1;  
  48.                         result_temp += 1;  
  49.                     }  
  50.                 }  
  51.             }  
  52.         }  
  53.         printf("参数A比参数B大有%d种可能\n", result_temp);  
  54.     }  
  55.   
  56.     printf("用户终止程序\n");  
  57.     system("pause");  
  58.   
  59.     return 0;  
  60. }