CSDN竞赛第37期题解

CSDN竞赛第37期题解

1、题目名称:幼稚班作业

幼稚园终于又有新的作业了。 老师安排同学用发给同学的4根木棒拼接成一个三角形。 当然按照正常的逻辑,如果不能拼
接成三角形。 必然要折断某个木棍来拼接三角形。 可是懒惰的小艺当然不会费力了! 如果拼接不成三角形,小艺就会把
它拼接成类似边长 1 1 2的伪三角形(两边之和等于第3边)。 如果伪三角形都拼接不成那就不交作业!

int main(){
    
    
int a[4];for(int i=0;i<4;i++) cin>>a[i];
sort(a,a+4);
if(a[0]+a[1]>a[2]||a[1]+a[2]>a[3]){
    
    
puts("1");
}
else if(a[0]+a[1]==a[2]||a[1]+a[2]==a[3]){
    
    
puts("0");
}
else puts("-1");
return 0;
}

2、题目名称:异或和

小张找到了一个整数 N,他想问问你从 1 到 N 的所有不同整数的异或和是多少, 请你回答他的问题。
此题由CSDN用户a23333a提供

int n;cin>>n;
int s =0;
for(int i=1;i<=n;i++) s^=i;
cout<<s;

3、题目名称:大整数替换数位

以字符串的形式给你一个长度为 M 的整数 N,请你计算出对这个数进行一次操作后模 9 的值为 1 的所有可能的不同操作
方式。
在一次操作中, 我们可以选择 N 的一个数位 N[i],并把它替换成另一个不同的 0 到 9 范围之内的数 B,当且仅当它们选
择的 i 或 B 不同时两种操作方式不同。
此题由CSDN用户a23333a提供

int m;cin>>m;
string s;cin>>s;
int t = 0;
for(int i=0;i<m;i++) t+=s[i]-'0';
//printf("t=%d\n",t);
int ans = 0;
for(int i=0;i<m;i++){
    
    
for(int j=0;j<10;j++){
    
    
int tmp = t;
tmp-=s[i]-'0';
tmp+=j;
//printf("%d %d t=%d\n",i,j,tmp);
if((tmp%9+9)%9==1){
    
    
ans++;
}
}
}
cout<<ans;

4、题目名称:莫名其妙的键盘

有一个神奇的键盘,你可以用它输入a到z的字符,然而每当你输入一个元音字母(a,e,i,o,u其中之一)的时候,已输入的字
符串会发生一次反转! 比方说,当前输入了tw,此时再输入一个o,此时屏幕上的字符串two会反转成owt。 现给出一个
字符串,若用该键盘输入,有多少种方法可以得到?

bool ck(char ch){
    
    
return ch=='a'||ch=='e'||ch=='i'||ch=='o'||ch=='u';
}
int dfs(string s){
    
    
if((int)s.size()==1) return 1;
int t =0;
if(ck(s[0])) {
    
    
string tmp = s.substr(1);
reverse(tmp.begin(),tmp.end());
t+=dfs(tmp);
}
if(!ck(s.back())){
    
    
t+=dfs(s.substr(0,(int)s.size()-1));
}
return t;
}
int main(){
    
    
string s;cin>>s;
//int n =s.size();
cout<<dfs(s);
return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_45750972/article/details/129622113