自从蓝桥杯之后,都没写博客了。今天将之前第三章还差的一部分习题答案补上。
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;
}
到这里我们就将算法竞赛入门经典的基础篇算是告一段落了。
以上如果有更好的解法或者错误,请多指教。
(如有转载,请注明出处)