CSP刷题总结
2019
12.a
判断是否是7的倍数或者含有7:
bool isseven(int n){
if(n%7==0) return true;
else {
for(;n!=0;n/=10){
if(n%10==7) return true;//类似用数组存储大整数的办法
}
//while(n){
//if(n%10==7) return true;
// n = n/10;
//}
}
return false;
}
当然也可以把所有的情况都列出来判断:
bool isseven(int n){
if(n%7==0) return true;
else if(n>10&&n<100){
if(n%10==7) return true;
else if(n/10==7) return true;
}
else if(n>=100&&n<=1142){//注意上限不能只开到999,陷阱!
if(n%10==7) return true;
else if(n%100/10==7) return true;
else if(n/100==7) return true;
}
return false;
}
3.a
题目要求输出的时候如果有浮点数要保留一位小数输出:
error:不能将``int直接
.1f输出,要先转化为
double`类型:
if((name[n/2-1]+name[n/2])%2==1) {
// double c = double(name[n/2-1]+name[n/2])/2;
printf("%.1f",(name[n/2-1]+name[n/2])/2);
// printf(“%.1f,c);
}
2014
9.c
用了两种方法解决的:第一种遍历字符串:
bool flag = false;
int i,j;
//其中ans是搜索对象,name是Hello
//由题意当len1<len return false;故min = len
for(i = 0;i<len1;i++){
//for(j = 0;j<len;){
j = 0;
if(ans[i]==name[0]){
int same = 0;
while(ans[i]==name[j]&&i<len1&&j<len) {
i++;
j++;
same++;
}
if(j!=len){
//j = 0;
i = i-same;//注意不是i=0
//flag = false;
//break;
}
else if(j==len){
flag = true;
break;
//return true;
}
//}
//else j++;
}
//if(flag) break;
}
if(!flag)
return false;
else return true;
}
int main(){
char s1[100][100],s2[100][100];
strcpy(s1,s2);
}
这种方法类似于PATA1084:给两个字符串,判断在第一个字符串中有哪些字符没有在第二个字符串中出现(不区分大小写)
int main(){
char str1[100],str2[100];
bool hashtable[128] = {false};
gets(str1);
gets(str2);
int len1 = strlen(str1);
int len2 = strlen(str2);
for(int i = 0;i<len1;i++){
int j;
char c1,c2;
for(j = 0;j<len2;j++){
c1 = str1[i];
c2 = str2[j];
if(c1>='a'&&c1<='z') c1-=32;
if(c2>='a'&&c2<='z') c2-=32;
if(c1==c2) break;
}
if(j==len2&&hashtable[c1]==false){
printf("%c",c1);
hashtable[c1] = true;
}
}
}
思路都是一样的:双重循环,然后根据最后的j
与len
的关系判断是否找到,否则及时break
;
第二种思路:用string
容器来做:
void exchange(string &s){
s[i] = s[i]-'A'+'a';
}
int main(){
cin>>s>>n>>m;
if(m==0){
exchange(s);
for(int i = 0;i<n;i++){
cin>>ans;
exchange(ans);
string temp = ans;
if(ans.fins(s)!=ans.npos){//注意这个用法,npos的时候为find找不到
cout<<temp<<endl;
}
}
}
}
其他string
常用的函数:
1.operator +=:可以直接拼接两个string,特别是输出含有空格的字符串的时候:
string ans;
char c
while(c = getchar()!='\n'){
ans+=c;
}
2.compare operator:可以直接利用==,!=,<,>,>=等,比较的是字典序;
3.insert():
string ans1 = "abcxyz",ans2 = "opq";
ans1.insert(3,str2);
ans1.insert(str1.begin()+3,str2.begin();str2.end());//用迭代器
//输出都是abcopqxyz
4.erase():
str.erase(s.begin()+4);
it = str1.find(str2);
st