Chinaunix首页 | 论坛 | 博客
  • 博客访问: 160222
  • 博文数量: 22
  • 博客积分: 828
  • 博客等级: 上士
  • 技术积分: 290
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-01 18:16
文章分类

全部博文(22)

文章存档

2012年(22)

分类: C/C++

2012-05-23 12:40:17

因为就做了4道,这里解析就四道了
其他题目不会做,求高手解答啊!!!
 
B - Who's in the Middle
Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u
如题这是一个找中位数的题目,而题中又给出了n为奇数。所以只要弄个数组,排个序,把中间的数输出就行了!下面是c++代码

点击(此处)折叠或打开

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.     int a[10000],n,i,t,flag=1;
  6.     cin>>n;
  7.     for(i=0;i<n;i++)
  8.         cin>>a[i];
  9.     while(flag)
  10.     {
  11.         flag=0;
  12.         for(i=0;i<n-1;i++)
  13.             if(a[i]>a[i+1])
  14.             {
  15.                 t=a[i];
  16.                 a[i]=a[i+1];
  17.                 a[i+1]=t;
  18.                 flag=1;
  19.             }
  20.     }
  21.         cout<<a[(n-1)/2]<<endl;
  22.     return 0;
  23. }
C - Bank Interest
Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u
 
题目意思就是我们小时候常做的存钱求存了n年以后本金是多少。于是我们用一个循环,s=s*(100+r)/100.0来表示因为它要求不四舍五入,所以用(100+r)/100.0。下面是c++代码

点击(此处)折叠或打开

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.     int r,m,y,i;
  6.     double s;
  7.     cin>>r>>m>>y;
  8.     s=m;
  9.     for(i=0;i<y;i++)
  10.         s=s*(100+r)/100.0;
  11.     cout<<int(s)<<endl;
  12.     return 0;
  13. }

D - Joseph
Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u
这道题真不会做,试了好久还是错,求高手指教!!!
 
E - Spell checker
Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u
这个题目就是判断字符是否相等,判断也就那么几种情况,1.不删不补 2.删除任意r个 3.增加任意r个
下面为c++代码:


点击(此处)折叠或打开

  1. #include<iostream>
  2. using namespace std;

  3. const int LEN = 18;
  4. const int MAX_MAP_LEN = 10010;

  5. class String
  6. {
  7. public:
  8. char string[LEN];
  9. int size;
  10. void getSize()
  11. {
  12. size = strlen(string);
  13. }
  14. };

  15. inline int kin_strcmp(String a,String b)
  16. {
  17. int i;
  18. for(i=0;i<b.size;i++)
  19. {
  20. if(*(a.string+i) != *(b.string+i)) return i;
  21. }
  22. return i;
  23. }

  24. int changeone_strcmp(String a,String b)
  25. {
  26. int i,count=0;
  27. int loc=b.size;
  28. for(i=0;i<b.size;++i)
  29. {
  30. if(*(a.string+i) != *(b.string+i))
  31. {
  32. loc = i;
  33. if(count++>2)
  34. return -1;
  35. }
  36. }
  37. return loc;
  38. }


  39. inline bool changeOne(String a,String b)
  40. {
  41. int loc;
  42. char i;
  43. loc = changeone_strcmp(a,b);
  44. if(loc<0) return false;
  45. for(i='a'; i<='z'; i++)
  46. {
  47. *(b.string+loc)=i;
  48. if(strcmp(a.string, b.string )==0){
  49. return true;
  50. }
  51. }
  52. return false;
  53. }

  54. inline bool deleteOne(String a,String b)
  55. {
  56. int i;
  57. char fir[LEN];
  58. for(i=0; i<b.size; i++)
  59. {
  60. *fir='\0';
  61. strncat(fir,b.string,i);
  62. strcat(fir,b.string+i+1);
  63. if(strcmp(a.string, fir )==0)
  64. {
  65. return true;
  66. }
  67. }
  68. return false;
  69. }

  70. bool InsertOne(String a,String b)
  71. {
  72. int i;
  73. char fir[LEN];
  74. int loc = kin_strcmp(a,b);
  75. for(i='a'; i<='z'; i++)
  76. {
  77. *fir='\0';
  78. strncat(fir,b.string,loc);
  79. *(fir+loc)=i;
  80. *(fir+loc+1)='\0';
  81. strcat(fir,b.string+loc);
  82. if(strcmp(a.string, fir )==0)
  83. {
  84. return true;
  85. }
  86. }
  87. return false;
  88. }

  89. int main()
  90. {
  91. int top = 0,i;
  92. String map[MAX_MAP_LEN];
  93. String str;
  94. bool isFirstOne;
  95. while(scanf("%s",map[top].string),map[top].string[0]!='#')
  96. {
  97. map[top++].getSize();
  98. }

  99. while(scanf("%s",str.string),str.string[0] != '#')
  100. {
  101. isFirstOne = true;
  102. str.getSize();
  103. for(i=0; i<top; ++i)
  104. {
  105. if(strcmp(str.string,map[i].string)==0)
  106. {
  107. printf("%s is correct\n",str.string);
  108. break;
  109. }
  110. }
  111. if(i<top) continue;
  112. for(i=0; i<top; ++i)
  113. {
  114. if(str.size==map[i].size)
  115. {
  116. if(changeOne(str,map[i]))
  117. {
  118. // cout<<endl<<"**"<<map[i]<<endl;
  119. if(isFirstOne == true){
  120. printf("%s:",str.string);
  121. isFirstOne = false;
  122. }
  123. printf(" %s",map[i].string);
  124. }
  125. } else
  126. if(str.size==map[i].size-1)
  127. {
  128. if(deleteOne(str,map[i]))
  129. {
  130. if(isFirstOne == true)
  131. {
  132. printf("%s:",str.string);
  133. isFirstOne = false;
  134. }
  135. printf(" %s",map[i].string);
  136. }
  137. }
  138. else
  139. if(str.size==map[i].size+1)
  140. {
  141. if(InsertOne(str,map[i]))
  142. {
  143. if(isFirstOne == true)
  144. {
  145. printf("%s:",str.string);
  146. isFirstOne = false;
  147. }
  148. printf(" %s",map[i].string);
  149. }
  150. }
  151. }
  152. if(isFirstOne)
  153. {
  154. printf("%s:",str.string);
  155. isFirstOne = false;
  156. }
  157. cout<<endl;
  158. }
  159. return 0;
  160. }


 
F - Triangle Wave
Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu
这道题就是排数阵,只要题意理解正确,解答起来应该不难,只要几个循环,题目就做出来了。重要的是那三个数的含义。第一个数表示有几组数,第二个数表示最大数,第三个数表示一组数显示几个。下面为c++代码:

点击(此处)折叠或打开

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.     int a,b[10000],c[10000],i,j,k,l;
  6.     cin>>a;
  7.     for(i=0;i<a;i++)
  8.         cin>>b[i]>>c[i];
  9.     for(i=0;i<a-1;i++)
  10.     {
  11.     for(l=0;l<c[i]-1;l++)
  12.     {
  13.         for(j=1;j<=b[i];j++)
  14.         {
  15.             for(k=0;k<j;k++)
  16.                 cout<<j;
  17.             cout<<endl;
  18.         }
  19.         for(j=b[i]-1;j>=1;j--)
  20.         {
  21.             for(k=0;k<j;k++)
  22.                 cout<<j;
  23.             cout<<endl;
  24.         }
  25.         cout<<endl;
  26.     }
  27.     for(j=1;j<=b[i];j++)
  28.         {
  29.             for(k=0;k<j;k++)
  30.                 cout<<j;
  31.             cout<<endl;
  32.         }
  33.     for(j=b[i]-1;j>=1;j--)
  34.         {
  35.             for(k=0;k<j;k++)
  36.                 cout<<j;
  37.             cout<<endl;
  38.         }
  39.     cout<<endl;
  40.     }
  41.     for(l=0;l<c[i]-1;l++)
  42.     {
  43.         for(j=1;j<=b[i];j++)
  44.         {
  45.             for(k=0;k<j;k++)
  46.                 cout<<j;
  47.             cout<<endl;
  48.         }
  49.         for(j=b[i]-1;j>=1;j--)
  50.         {
  51.             for(k=0;k<j;k++)
  52.                 cout<<j;
  53.             cout<<endl;
  54.         }
  55.         cout<<endl;
  56.     }
  57.     for(j=1;j<=b[i];j++)
  58.         {
  59.             for(k=0;k<j;k++)
  60.                 cout<<j;
  61.             cout<<endl;
  62.         }
  63.     for(j=b[i]-1;j>=1;j--)
  64.         {
  65.             for(k=0;k<j;k++)
  66.                 cout<<j;
  67.             cout<<endl;
  68.         }
  69.     return 0;
  70. }


 

阅读(3346) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~