由于前半个学期有各种各样的课,没有多少时间刷多少题。这周做了两道基础题目,不过还是得到了不少wa……
第一题是UVa的401 palindrome
这道题不仅要判断回文串,还要判断题目里面自己定义的自己跟自己成镜像关系。所谓镜像关系就是像A,如果把A反过来看,还是A。
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
char firstmstring[]={'A','E','H','I','J','L','M','O','S','T','U','V','W','X','Y','Z','1','2','3','5','8'};
char secondmstring[]={'A','3','H','I','L','J','M','O','2','T','U','V','W','X','Y','5','1','S','E','Z','8',};
int ispalindrom(char *A,int n){
int isp=1;
for(int i=0;i<=n/2+1;++i){
if(A[i]!=A[n-i]){isp=0;break;}
}
return isp;
}
int ismstring(char *A,int n){
int ism=1;
for(int i=0;i<=n/2+1;++i){
int t;
int have=0;
for(t=0;t<=20;++t){
if(A[i]==firstmstring[t]){have=1;break;}
}
if(!have)return 0;
if(A[n-i]!=secondmstring[t]){ism=0;break;}
}
return ism;
}
int main(){
char A[25];
while(scanf("%s",A)!=EOF){
int a,b;
a=ispalindrom(A,strlen(A)-1);
b=ismstring(A,strlen(A)-1);
if(!a&&!b){cout<<A<<" -- is not a palindrome."<<endl<<endl;continue;}
if(a&&!b){cout<<A<<" -- is a regular palindrome."<<endl<<endl;continue;}
if(!a&&b){cout<<A<<" -- is a mirrored string."<<endl<<endl;continue;}
if(a&&b){cout<<A<<" -- is a mirrored palindrome."<<endl<<endl;continue;}
}
return 0;
}
这段代码的问题是在判断ismstring中会出问题。比如只输入一个A,这个函数就错了。原因是循环终止的条件不对。应当改成n/2。
另外,这个算法的效率也是很低的。
这周训练的第二题是大数据运算
424 integer inquiry
每个数据最大可以到100位,数据最多可以有100个连加。所以必定不能用基本数据类型
对于输入,直接用整形的话不好中断(怎么让程序知道按下回车以后输入一个数就结束了),所以输入用的字符型。C++中字符之中可以进行加减运算,是ASCII码的加减。
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
int main(){
char a[10000];
int s[10000];
memset(s,0,sizeof(s));
int tot=0;
while(scanf("%s",a)){
int l=strlen(a);
if((l-1)==0&&a[0]=='0')break;
int j=0;
int add=0;
l-=1;
while(l>=0){
s[j]=add+s[j]+(a[l]-'0');
add=0;
if(s[j]>=10){
add+=(s[j])/10;
s[j]%=10;
}
l--;
j++;
}
s[j]+=add; //第一遍提交时为s[j]=add;
tot=tot>j?tot:j; //第一遍提交时为tot=j;
}
int st;
for(st=tot;;st--){
if(s[st])break;
}
for(;st>=0;st--){
cout<<s[st];
}
cout<<endl;
return 0;
}
第一遍提交的时候忽略了对最高位的特殊处理。导致了答案错误,比如输入999和99,会输出198,。
另外发现了一个问题,在Cfree中可以使用如tot>?=j这种运算符,表示tot等于tot与j中较大的一个,但是在uva中提交的时候就出现了编译错误。
版权声明:本文为u010734277原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。