标签:
自从蓝桥杯之后,都没写博客了。今天将之前第三章还差的一部分习题答案补上。
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 + 10 using 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 + 10 using 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; else num[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 + 10 typedef 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; }
到这里我们就将算法竞赛入门经典的基础篇算是告一段落了。
以上如果有更好的解法或者错误,请多指教。
(如有转载,请注明出处)
标签:
原文地址:http://blog.csdn.net/luomingjun12315/article/details/45157251