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

题目要求:

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

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

输出样例
100
0
4

  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. while(1){
  10. memset(num1, 0, num_max_length);
  11. memset(num2, 0, num_max_length);
  12. result_temp=0;
  13. result = 0;
  14. flag = 0;
  15. printf("参数A:");
  16. fgets(num1, num_max_length, stdin);
  17. if(memcmp(num1, "end", 3)==0) break;
  18. printf("参数B:");
  19. fgets(num2, num_max_length, stdin);
  20. if(memcmp(num2, "end", 3)==0) break;
  21. if((num_length=strlen(num1))!=strlen(num2)){
  22. printf("num1 num2 length not match\n");
  23. break;
  24. }
  25. for(num_index=0; num_index<num_length; num_index++){
  26. if(num1[num_index]=='?'){
  27. if(flag == 0)
  28. result_temp = (int)('9'-num2[num_index])+result_temp*10;
  29. else
  30. result_temp = result_temp*10;
  31. }
  32. else{
  33. if(num1[num_index]==num2[num_index]){
  34. continue;
  35. }
  36. else if(num1[num_index]<num2[num_index]){
  37. //break;
  38. if(flag == 0){
  39. flag = 1;
  40. }
  41. }
  42. else{
  43. if(flag == 0){
  44. flag = 1;
  45. result_temp += 1;
  46. }
  47. }
  48. }
  49. }
  50. printf("参数A比参数B大有%d种可能\n", result_temp);
  51. }
  52. printf("用户终止程序\n");
  53. system("pause");
  54. return 0;
  55. }

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

上一篇:winform防止界面卡死的三种方法


下一篇:【Beta阶段】计划安排