24真题
1.相亲数
#include <iostream>
#include <cmath>
using namespace std;
int sum(int n)
{
int res=1;
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0&&i<sqrt(n))res=res+i+n/i;
else if(n%i==0)res+=i;
}
return res;
}
int main()
{
int a,b;
cin>>a>>b;
for(int i=1;i<10000;i++)
{
int i_q=sum(i);
if(i_q>i&&i_q<10000)
{
if(sum(i_q)==i)
cout<<i<<" "<<i_q<<endl;
}
}
return 0;
}
异位字符串
#include <iostream>
#include <cstring>
using namespace std;
int sa[26],sA[26];
int ta[26],tA[26];
int main()
{
string s,t;
cin>>s>>t;
for(int i=0;i<s.size();i++)
{
if(s[i]>='A'&&s[i]<='Z')
{
sA[s[i]-'A']++;
}
else if(s[i]>='a'&&s[i]<='z')
{
sa[s[i]-'a']++;
}
}
for(int i=0;i<t.size();i++)
{
if(t[i]>='A'&&t[i]<='Z')
{
tA[t[i]-'A']++;
}
else if(t[i]>='a'&&t[i]<='z')
{
ta[t[i]-'a']++;
}
}
bool same=true;
for(int i=0;i<26;i++)
{
if(sa[i]!=ta[i]||sA[i]!=tA[i])
{
same=false;
break;
}
}
if(same)puts("ture");
else puts("flase");
return 0;
}
23真题
1.职工年龄
#include <iostream>
using namespace std;
int t[55];
int main()
{
int n;
cin>>n;
while(n--)
{
int ag;
cin>>ag;
t[ag]++;
}
for(int i=0;i<=50;i++)
{
if(t[i])printf("%d:%d\n",i,t[i]);
}
return 0;
}
2.二维前缀和
#include <iostream>
using namespace std;
const int N=1010;
int s[N][N];
int main()
{
int n,m,q;
cin>>n>>m>>q;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
int a;
cin>>a;
s[i][j]=a+s[i-1][j]+s[i][j-1]-s[i-1][j-1];
}
while(q--)
{
int a,b,x,y;
cin>>a>>b>>x>>y;
int ans=0;
ans=s[x][y]-s[x][b-1]-s[a-1][y]+s[a-1][b-1];
cout<<ans<<endl;
}
}
3.机器人过障碍
#include <iostream>
using namespace std;
const int N=35;
int a[N];
int main()
{
int n;
cin>>n;
a[1]=1,a[2]=2;
for(int i=3;i<=n;i++)
a[i]=a[i-1]+a[i-2];
cout<<a[n];
return 0;
}
22真题
1.无人机大靶
#include<iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=35;
struct RO
{
string c;
int s;
bool operator< (const RO&t)const
{
return s>t.s;
}
bool operator> (const RO&t)const
{
return s<t.s;
}
}ro[N];
int main()
{
int n;
cin>>n;
int b=0,g=0,p=0,r=0;
for(int i=0;i<n;i++)
{
char op;
int a;
cin>>op>>a;
ro[i].s=a;
if(op=='b'){ro[i].c="blue";b++;}
else if(op=='g'){ro[i].c="green";g++;}
else if(op=='p'){ro[i].c="purple";p++;}
else {ro[i].c="red";r++;}
}
sort(ro,ro+n);
for(int i=0;i<n;i++)
{
printf("%d %s\n",ro[i].s,ro[i].c.c_str());
}
sort(ro,ro+n,greater<RO>());
printf("%s %d\n%s %d\n%s %d\n%s %d\n\n","blue",b,"green",g,"purple",p,"red",r);
for(int i=0;i<n;i++)
{
printf("%d %s\n",ro[i].s,ro[i].c.c_str());
}
}
2.顺子
#include <iostream>
#include <vector>
#include <unordered_set>
using namespace std;
vector<int> a;
int main()
{
for(int i=0;i<5;i++)
{
string x;
cin>>x;
if(x>="0"&&x<="9")a.push_back(stoi(x));
else if(x=="10")a.push_back(10);
else if(x=="A")a.push_back(1);
else if(x=="J")a.push_back(11);
else if(x=="Q")a.push_back(12);
else if(x=="K")a.push_back(13);
else if(x=="W"||x=="w")a.push_back(0);
}
int maxx=a[0],minn=a[0];
unordered_set<int> s;
for(int x:a)
{
if(x==0)continue;
else if(x>maxx)maxx=x;
else if(x<minn)minn=x;
if(s.count(x))return false;
s.insert(x);
}
if((maxx-minn)<5)cout<<"是顺子";
else cout<<"不是顺子";
}
3.递归实现指数型枚举
21真题
1.马鞍点
#include <iostream>
using namespace std;
const int N=15;
int a[N][N];
int mi[N],ma[N];
int cnt;
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
{
ma[i]=a[i][1];
for(int j=1;j<=m;j++)
{
if(a[i][j]>ma[i])ma[i]=a[i][j];
}
}
for(int j=1;j<=m;j++)
{
mi[j]=a[1][j];
for(int i=1;i<=n;i++)
{
if(a[i][j]<mi[j])mi[j]=a[i][j];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]==ma[i]&&a[i][j]==mi[j])
{
cnt++;
printf("%d %d %d\n",i,j,a[i][j]);
}
}
}
if(cnt==0)puts("NO");
}