A.Odd Palindrome
题意:
一组字符串,倘若每个回文串均是偶数,则输出“Or not.",否则输出“Odd.‘’
思路:
暴力枚举即可。
代码:
#include <bits/stdc++.h>
using namespace std;
char s[105];
int main()
{
bool flag;
cin>>s;
int len =strlen(s);
for(int i=1;i<=len-1;i++)
{
for(int j=0;j<=i;j++)
{
flag=1;
for(int k=0;k<=(i-j)/2;k++)
{
if(s[i-k]!=s[j+k])
{
flag=0;
break;
}
}
if(flag==1)
{
int leng = i-j+1;
if(leng%2==0)
{
cout<<"Or not."<<endl;
return 0;
}
}
}
}
cout<<"Odd."<<endl;
return 0;
}
B.Latin Squares
题意:
有一个n*n的方阵,其中A-Z代表10到35,如果这个方阵中的每一行每一列元素均不相同,则称为Latin Squares,若不是,则输出“No”,若是,然后看第一行第一列是否是递增的序列,若是则输出“Reduced”否则输出“Not Reduced”。
思路:
将字符全部转换为数字,暴力枚举即可。
代码:
#include <bits/stdc++.h>
using namespace std;
char s[41][41];
int num[41][41];
int vis[50];
int n;
int main()
{
while(cin>>n) //注意是多组输入
{
int flag=0;
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cin>>s[i][j];
if(s[i][j]<='9'&&s[i][j]>='0')
{
num[i][j]=s[i][j]-'0';
}
else
{
num[i][j]=s[i][j]-'A'+10;
}
}
}
for(int i=0;i<n;i++) ///hang
{
memset(vis,0,sizeof(vis));
for(int j=0;j<n;j++) ///lie
{
if(vis[num[i][j]]==0)
{
vis[num[i][j]]++;
}
else
{
flag=1;
break;
}
}
}
if(flag==1)
{
cout<<"No"<<endl;
continue;
}
for(int i=0;i<n;i++) ///lie
{
memset(vis,0,sizeof(vis));
for(int j=0;j<n;j++) ///hang
{
if(vis[num[j][i]]==0)
{
vis[num[j][i]]++;
}
else
{
flag=1;
break;
}
}
}
if(flag==1)
{
cout<<"No"<<endl;
continue;
}
for(int i=1;i<n;i++) ///diyihang
{
if(num[0][i-1]>=num[0][i])
{
flag=2;
break;
}
}
if(flag==2)
{
cout<<"Not Reduced"<<endl;
continue;
}
for(int i=1;i<n;i++) ///diyilie
{
if(num[i-1][0]>=num[i][0])
{
flag=2;
break;
}
}
if(flag==2)
{
cout<<"Not Reduced"<<endl;
continue;
}
if(flag==0)
cout<<"Reduced"<<endl;
}
return 0;
}
C.
题意:
给定n,从1开始,让1与2、3、4、。。。n进行比较,此时输出的结果是1,然后在让2与3、4、5...n进行比较,此时输出2,注意每两个数字只能比较一次,问总共比较一半次数时,输出那个数字?
代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
ll n,sum,i,j,res;
cin>>n;
sum=(n-1)*n/2;//总共比较次数
sum=(sum+1)/2; //总共比较次数的一半,注意这种情况
for(i=n-1,j=1;j<n;j++,i--)
{
res+=i;
if(res>=sum) //大于一半时
{
cout<<j<<endl;
break;
}
}
return 0;
}
I.Forbidden Zero
题意:
给你一个不包含数字0得数,问你下一个不包含0的数字是多少?
思路:
0用1替换即可
代码:
#include <bits/stdc++.h>
using namespace std;
char s[10];
int b[10];
int solve(int x)
{
int cnt=0;
while(x)
{
b[cnt++]=x%10;
x/=10;
}
for(int i=0;i<cnt;i++)
{
if(b[i]==0)
{
s[i]='1';
}
else s[i]=b[i]+'0';
}
return cnt;
}
int main()
{
int n;
scanf("%d",&n);
n++;
int l=solve(n);
for(int i=l-1;i>=0;i--)
{
printf("%c",s[i]);
}
printf("\n");
return 0;
}
- 什么