【算法竞赛入门经典】【第三章】课后习题(第二部分)

自从蓝桥杯之后,都没写博客了。今天将之前第三章还差的一部分习题答案补上。

3-4整数相加

这一题题目有提示,说选择合适的输入方式,即可简化问题。刚开始没想到cin,结果还用字符串来做,多亏别人提醒我一下,我才想起cin。惭愧啊。。

#include <iostream>using namespace std;int main(){int a,b;char op;while(cin>>a>>op>>b){switch(op){case '+':cout<<a+b<<endl; break;case '-':cout<<a-b<<endl; break;case '*':cout<<a*b<<endl; break;}}return 0;}

3-5 将字符方阵逆时针旋转90度

#include <iostream>#define MAXN 1000 + 10using namespace std;int main(){char m[MAXN][MAXN];int i,j,n;while(cin>>n){for(i = 0; i < n; i++){for(j = 0;j<n;j++){cin>>m[i][j];}}for(i = n-1;i>=0;i–){for(j = 0;j<n;j++){cout<<m[j][i];}cout<<endl;}}return 0;}

3-6 进制转换(将十进制转化为其他进制)

这一题我将题目扩展了一下就变成了hdu2031 进制转换,下面我也是以hdu这一题的方式来做(不过好像也没什么区别)

#include <iostream>#include <string.h>#define MAXN 1000 + 10using namespace std;int main(){int n,b;int p,cnt;char num[MAXN];while(cin>>n>>b){memset(num,0,sizeof(num));cnt = 0;if(n<0){cout<<"-";n = -n;}if(n<2)cout<<n<<endl;else{while(n>0){p = n%b;n /= b;if(p>9)num[cnt++] = p + 'A' – 10;elsenum[cnt++] = p + '0';}num[cnt] = '\0';}for(int i = strlen(num)-1;i>=0;i–)cout<<num[i];cout<<endl;}return 0;}

3-7进制转换(将其他进制转换为十进制)

这一题本来想把它扩展成一个很大很大的任意进制的数 转化为 十进制的数 ,,但是没有想到一个比较简洁有力的方法,所以这个我就只能就题论题了。

#include <iostream>#include <string.h>#include <cmath>#define MAXN 1000 + 10;using namespace std;int change(int n,int b){int ans = 0;int p;for(int i = 0; n>0;i++,n/=10){p = (n%10) * pow(b,i);ans += p;}return ans;}int main(){int n,b;while(cin>>n>>b){cout<<change(n,b)<<endl;}return 0;}

3-8手机键盘

这一个一眼看过果断打表,暴力解决。

#include <stdio.h>#include <string.h>#define MAXN 100 + 10typedef struct{char a;char str[10];}CH;int main(){char word[MAXN];CH p[26]={{'a',"a1"}, {'b',"b2b1"}, {'c',"c3c1"},{'d',"d1"}, {'e',"e2e1"},{'f',"f3f1"},{'g',"g1"},{'h',"h2h1"},{'i',"i3i1"},{'j',"j1"}, {'k',"k2k1"},{'l',"l3l1"},{'m',"m1"}, {'n',"n2n1"},{'o',"o3o1"},{'p',"p1"}, {'q',"q2q1"},{'r',"r3r1"},{'s',"s4s1"},{'t',"t1"}, {'u',"u2u1"},{'v',"v3v1"},{'w',"w1"}, {'x',"x2x1"},{'y',"y3y1"},{'z',"z4z1"}};while(1){scanf("%s",word);for(int i = 0; i < strlen(word); i++){for(int j = 0; j<26;j++){if(word[i]==p[j].a){printf("%s",p[j].str);}}}printf("\n");}return 0;}

到这里我们就将算法竞赛入门经典的基础篇算是告一段落了。以上如果有更好的解法或者错误,请多指教。

(如有转载,请注明出处)

远离城市的喧嚣,寻找一份宁静,

【算法竞赛入门经典】【第三章】课后习题(第二部分)

相关文章:

你感兴趣的文章:

标签云: