1.ISBN号码
#include
using namespace std;
int main()
{
char ch;
int a[3],sum=0,temp=0,b[9]={1,4,3,2,9,8,7,6,5};
for(int i=0;i<3;i++)
{
cin>>a[i]>>ch;
int c=a[i];
do
{
sum+=(c%10)*b[temp++];
c/=10;
}while(c);
}
char p;
cin>>p;
char q;
if(sum%11!=10)
q=sum%11+48;
else
q='X';
if(p==q)
cout<<"Right";
else
{
for(int i=0;i<3;i++)
cout<<a[i]<<"-";
cout<<q;
}
return 0;
}
2.Z字形扫描
#include
using namespace std;
int a[1000][1000];
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
int p;
cin>>p;
a[i][j]=p;
}
}
if(n==1)
cout<<a[0][0];
else
{
int b=-1,c=1,p=0,q=0,i=0,j=0,sum=0;
cout<<a[0][0]<<" ";
while(sum<2*n-3)
{
if(b==1)
i++;
else
j++;
p=i;q=j;
while(i!=q||j!=p)
{
cout<<a[i][j]<<" ";
i+=c;
j-=c;
}
cout<<a[i][j]<<" ";
c*=-1;
sum++;
if(sum!=n-1)
b*=-1;
}
cout<<a[n-1][n-1];
}
return 0;
}
3.出现次数最多的数
#include
#include
using namespace std;
int main()
{
map<int,int> m;
map<int,int>::iterator it;
int n;
cin>>n;
for(int i=0;i<n;i++)
{
int p;
cin>>p;
m[p]++;
}
int min=0,max=0;
for(it=m.begin();it!=m.end();it++)
{
if(it->second>max)
{
max=it->second;
min=it->first;
}
}
cout<<min;
return 0;
}
4.窗口
#include
#include
#include
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
int a[3000][2000];
struct node
{
int x1,x2,y1,y2;
};
int main()
{
mem(a,0);
int n,m;
cin>>n>>m;
string result[m];
struct node b[n];
for(int k=1;k<=n;k++)
{
int x1,y1,x2,y2;
cin>>x1>>y1>>x2>>y2;
b[k-1].x1=x1;b[k-1].x2=x2;b[k-1].y1=y1;b[k-1].y2=y2;
for(int i=x1;i<=x2;i++)
for(int j=y1;j<=y2;j++)
a[i][j]=k;
}
for(int k=0;k<m;k++)
{
int p,q;
cin>>p>>q;
if(a[p][q]!=0)
{
result[k]=to_string(a[p][q]);
for(int i=b[a[p][q]-1].x1;i<=b[a[p][q]-1].x2;i++)
for(int j=b[a[p][q]-1].y1;j<=b[a[p][q]-1].y2;j++)
a[i][j]=a[p][q];
}
else
result[k]="IGNORED";
}
for(int k=0;k<m;k++)
cout<<result[k]<<endl;
return 0;
}
5.打酱油
#include
using namespace std;
int main()
{
int m,sum=0;
cin>>m;
int n=m/10;
while(n>=5)
{
sum+=7;
n-=5;
}
while(n>=3)
{
sum+=4;
n-=3;
}
sum+=n;
cout<<sum;
return 0;
}
6.俄罗斯方块
#include
using namespace std;
struct node
{
int x;
int y;
};
int main()
{
int a[15][10],b[4][4];
for(int i=0;i<15;i++)
{
for(int j=0;j<10;j++)
{
int p;
cin>>p;
a[i][j]=p;
}
}
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
int p;
cin>>p;
b[i][j]=p;
}
}
struct node p[4];
int s=0;
for(int j=0;j<4;j++)
{
int c=0;
for(int i=0;i<4;i++)
{
if(b[i][j]==1)
{
c=1;
p[s].x=i;
p[s].y=j;
}
}
if(c)
s++;
}
int h,j,i=1,c=1;
cin>>h;
while(c)
{
for(j=0;j<s;j++)
{
if(a[p[j].x+i][p[j].y+h-1]==1||p[j].x+i==15)
{
c=0;
for(int k=0;k<s;k++)
for(int l=p[k].x+i-1;l>=i-1;l--)
a[l][p[k].y+h-1]=b[l-i+1][p[k].y];
}
}
i++;
}
for(int i=0;i<15;i++)
{
for(int j=0;j<10;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}
7.二十四点
#include
#include
#include
using namespace std;
int main()
{
int i,n,j=0;
cin>>n;
string result[n];
while(j<n)
{
int b,sum=0;
char a[10];
cin>>a;
stack<int> num;
for(i=0;i<7;i++)
{
if(a[i]>'0'&&a[i]<='9')
num.push(a[i]-'0');
else if(a[i]=='-')
{
num.push('0'-a[i+1]);
i++;
}
else if(a[i]=='x'||a[i]=='/')
{
b=num.top();
num.pop();
if(a[i]=='x')
num.push(b*(a[i+1]-'0'));
else
num.push(b/(a[i+1]-'0'));
i++;
}
}
while(!num.empty())
{
sum+=num.top();
num.pop();
}
if(sum==24)
result[j]="Yes";
else
result[j]="No";
j++;
}
for(i=0;i<n;i++)
cout<<result[i]<<endl;
return 0;
}
8.分蛋糕
#include
using namespace std;
int main()
{
int n,k,sum=0,temp=0;
cin>>n>>k;
for(int i=0;i<n;i++)
{
int a;
cin>>a;
sum+=a;
if(sum>k||sum==k)
{
temp++;
sum=0;
}
}
if(sum)
temp++;
cout<<temp;
return 0;
}
9.工资计算
#include
using namespace std;
int jisuan(int x);
int main()
{
int S,T;
cin>>T;
S=jisuan(T);
cout<<S;
return 0;
}
int jisuan(int x)
{
int y;
if(x<3500||x==3500)
y=x;
else if(x<4955||x==4955)
y=(x-105)*100/97;
else if(x<7655||x==7655)
y=(x-455)*100/90;
else if(x<11255||x==11255)
y=(x-1255)*100/80;
else if(x<30755||x==30755)
y=(x-1880)*100/75;
else if(x<44755||x==44755)
y=(x-3805)*100/70;
else if(x<61005||x==61005)
y=(x-6730)*100/65;
else
y=(x-15080)*100/55;
return y;
}
10.公共钥匙盒(模拟)
#include
#include
#include
using namespace std;
struct node
{
int id;
bool operate;
int time;
};
bool cmp(node x,node y);
int main()
{
int n,k;
cin>>n>>k;
vector<int> key;
vector<node> p;
for(int i=1;i<=n;i++)
key.push_back(i);
for(int i=0;i<k;i++)
{
struct node a,b;
int w,s,c;
cin>>w>>s>>c;
a.id=b.id=w;
a.time=s;b.time=s+c;
a.operate=0;b.operate=1;
p.push_back(a);
p.push_back(b);
}
sort(p.begin(),p.end(),cmp);
vector<int>::iterator it;
for(vector<node>::iterator i=p.begin();i<p.end();i++)
{
if((*i).operate)
{
it=find(key.begin(),key.end(),0);
*it=(*i).id;
}
else
{
it=find(key.begin(),key.end(),(*i).id);
*it=0;
}
}
for(int i=0;i<n;i++)
cout<<key[i]<<" ";
return 0;
}
bool cmp(node x,node y)
{
if(x.time==y.time)
{
if(x.operate==y.operate)
return x.id<y.id;
else
return x.operate>y.operate;
}
else
return x.time<y.time;
}
公共钥匙盒(复杂)
#include
#include
#include
using namespace std;
struct sit
{
int id;
int b;
int e;
int flag=0;
};
bool cmp1(sit x,sit y);
bool cmp2(sit x,sit y);
bool cmp3(sit x,sit y);
int main()
{
int n,k;
cin>>n>>k;
struct sit p[k];
int key[n];
for(int i=0;i<n;i++)
key[i]=i+1;
for(int i=0;i<k;i++)
{
int w,s,c;
cin>>w>>s>>c;
p[i].id=w;
p[i].b=s;
p[i].e=s+c;
}
sort(p,p+k,cmp1);
vector<int> v;
for(int i=0;i<k;i++)
{
int l;
for(int j=0;j<=i-1;j++)
{
if(p[j].e<=p[i].b&&p[j].flag==0)
{
v.push_back(j);
p[j].flag=1;
}
}
struct sit temp[v.size()];
int c=0,len=v.size();
for(l=0;l<len;l++)
{
c=1;
temp[l]=p[v.back()];
v.pop_back();
}
sort(temp,temp+len,cmp2);
if(c==1)
{
int a=0;
for(int j=0;j<n;j++)
{
if(key[j]==0)
{
key[j]=temp[a++].id;
if(a==l)
break;
}
}
}
for(int j=0;j<n;j++)
if(key[j]==p[i].id)
key[j]=0;
}
sort(p,p+k,cmp3);
for(int i=0;i<k;i++)
{
if(p[i].flag==0)
{
for(int j=0;j<n;j++)
if(key[j]==0)
{
key[j]=p[i].id;
goto here;
}
}
here:;
}
for(int i=0;i<n;i++)
cout<<key[i]<<" ";
return 0;
}
bool cmp1(sit x,sit y)
{
return x.b<y.b;
}
bool cmp2(sit x,sit y)
{
if(x.e==y.e)
return x.id<y.id;
else
return x.e<y.e;
}
bool cmp3(sit x,sit y)
{
return x.e<y.e;
}
11.画图
#include
#include
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
int a[200][200];
int main()
{
mem(a,0);
int n,area=0;
cin>>n;
while(n--)
{
int x1,x2,y1,y2;
cin>>x1>>y1>>x2>>y2;
for(int j=x1;j<=x2-1;j++)
for(int k=y1;k<=y2-1;k++)
a[j][k]=1;
}
for(int i=0;i<100;i++)
for(int j=0;j<100;j++)
if(a[i][j]==1)
area++;
cout<<area;
return 0;
}
12.火车购票
#include
#include
using namespace std;
int main()
{
vector<vector<int>> vec(20);
for(int i=0;i<20;i++)
vec[i].resize(5);
int n;
cin>>n;
for(int i=0;i<n;i++)
{
int j,p;
cin>>p;
for(j=0;j<20;j++)
{
if(vec[j].size()>=p)
{
for(int k=5*j+6-vec[j].size();k<5*j+6-vec[j].size()+p;k++)
cout<<k<<" ";
cout<<endl;
vec[j].resize(vec[j].size()-p);
break;
}
}
if(j==20)
{
int k=0;
while(p)
{
if(vec[k].size()<=p)
{
for(int l=5*k+6-vec[k].size();l<=5*k+5;l++)
cout<<l<<" ";
p-=vec[k].size();
vec[k].resize(0);
}
else
{
for(int l=5*i+6-vec[k].size();l<5*i+6-vec[j].size()+p;l++)
cout<<l<<" ";
vec[k].resize(vec[k].size()-p);
p=0;
}
k++;
}
cout<<endl;
}
}
return 0;
}
13.买菜
#include
#include
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
int time[100000];
int main()
{
mem(time,0);
int n;
cin>>n;
for(int i=0;i<n;i++)
{
int ai,bi;
cin>>ai>>bi;
for(int j=ai;j<=bi-1;j++)
time[j]=1;
}
int sum=0;
for(int i=0;i<n;i++)
{
int ci,di;
cin>>ci>>di;
for(int j=ci;j<=di-1;j++)
if(time[j])
sum++;
}
cout<<sum;
return 0;
}
14.卖菜
#include
#include
using namespace std;
int main()
{
stack<int> up;
int i,n,c,d,sum;
cin>>n;
int a[n],b[n-2];
for(i=0;i<n;i++)
{
sum=0;
cin>>a[i];
up.push(a[i]);
if(up.size()==3)
{
c=up.top();
while(!up.empty())
{
sum+=up.top();
if(up.size()==2)
d=up.top();
up.pop();
}
up.push(d);
up.push(c);
b[i-2]=sum/3;
}
}
cout<<(a[0]+a[1])/2<<" ";
for(i=0;i<n-2;i++)
cout<<b[i]<<" ";
cout<<(a[n-2]+a[n-1])/2;
return 0;
}
15.门禁系统
#include
#include
#include
using namespace std;
int main()
{
map<int,int> m;
vector<int> v;
vector<int>::iterator it;
int n;
cin>>n;
for(int i=0;i<n;i++)
{
int p;
cin>>p;
m[p]++;
v.push_back(m[p]);
}
for(it=v.begin();it<v.end();it++)
cout<<*it<<" ";
return 0;
}
16.碰撞的小球
#include
#include
using namespace std;
int main()
{
int n,l,t;
cin>>n>>l>>t;
vector<int> v;
for(int i=0;i<n;i++)
{
int loc;
cin>>loc;
v.push_back(loc);
}
int num[n];
for(int i=0;i<n;i++)
num[i]=1;
while(t--)
{
for(int i=0;i<n;i++)
{
v[i]+=num[i];
if(v[i]==0||v[i]==l)
num[i]*=-1;
}
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(v[i]==v[j])
{
num[i]*=-1;
num[j]*=-1;
}
}
}
}
for(int i=0;i<n;i++)
cout<<v[i]<<" ";
return 0;
}
17.日期计算
#include
using namespace std;
int main()
{
int y,d,sum=0;
cin>>y>>d;
int flag=0;
for(int i=1;i<=12;i++)
{
int day;
switch(i)
{
case 4:
case 6:
case 9:
case 11:day=30;break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:day=31;break;
case 2:day=28+(y%4==0&&y%100!=0||y%400==0);break;
}
for(int j=1;j<=day;j++)
{
sum++;
if(sum==d)
{
cout<<i<<endl<<j;
flag=1;
}
if(flag) break;
}
if(flag) break;
}
return 0;
}
18.数列分段
#include
using namespace std;
int main()
{
int n,sum=1;
cin>>n;
int q;
cin>>q;
for(int i=0;i<n-1;i++)
{
int num;
cin>>num;
if(num!=q)
sum++;
q=num;
}
cout<<sum;
return 0;
}
19.数位之和
#include
using namespace std;
int main()
{
int sum=0;
long long n;
cin>>n;
while(n>0)
{
sum+=n%10;
n/=10;
}
cout<<sum;
return 0;
}
20.数字排序
#include
#include
#include
using namespace std;
struct node
{
int key;
int value;
};
struct node a[2000];
bool cmp(node x,node y);
int main()
{
map<int,int> m;
map<int,int>::iterator it;
int n;
cin>>n;
for(int i=0;i<n;i++)
{
int p;
cin>>p;
m[p]++;
}
it=m.begin();
for(int i=0;i<m.size();i++)
{
a[i].key=it->first;
a[i].value=it->second;
it++;
}
sort(a,a+m.size(),cmp);
for(int i=0;i<m.size();i++)
cout<<a[i].key<<" "<<a[i].value<<endl;
return 0;
}
bool cmp(node x,node y)
{
if(x.value==y.value)
return x.key<y.key;
else
return x.value>y.value;
}
21.跳一跳
#include
using namespace std;
int main()
{
int a,sum=0,flag=0,temp=4;
while(1)
{
int sit;
cin>>sit;
if(sit==0)
break;
else if(sit==1)
{
temp=4;
flag=1;
sum++;
}
else
{
if(flag||sum==0)
sum+=2;
else
{
sum+=temp;
temp+=2;
}
flag=0;
}
}
cout<<sum;
return 0;
}
22.图像旋转
#include
using namespace std;
int b[1010][1010];
int main()
{
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)
{
for(int j=m-1;j>=0;j--)
{
int p;
cin>>p;
b[j][i]=p;
}
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
cout<<b[i][j]<<" ";
cout<<endl;
}
return 0;
}
23.相反数
#include
using namespace std;
int a[1000];
int main()
{
int n,sum=0;
cin>>n;
for(int i=0;i<n;i++)
{
int q;
cin>>q;
a[i]=q;
}
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if(a[i]==-1*a[j])
sum++;
cout<<sum;
return 0;
}
24.相邻数对
#include
#include
using namespace std;
int a[2000];
int main()
{
int n,sum=0;
cin>>n;
for(int i=0;i<n;i++)
{
int p;
cin>>p;
a[i]=p;
}
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if(abs(a[i]-a[j])==1)
sum++;
cout<<sum;
return 0;
}
25.消除类游戏
#include
using namespace std;
struct node
{
int v;
int flag=0;
};
int main()
{
int n,m;
cin>>n>>m;
struct node a[n][m];
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
int p;
cin>>p;
a[i][j].v=p;
}
}
for(int i=0;i<n;i++)
{
int sum=1;
for(int j=1;j<m;j++)
{
if(a[i][j].v==a[i][j-1].v)
sum++;
if(a[i][j].v!=a[i][j-1].v||j==m-1)
{
if(sum>=3)
for(int k=j-(a[i][j].v!=a[i][j-1].v);k>=j-(a[i][j].v!=a[i][j-1].v)-sum+1;k--)
a[i][k].flag=1;
sum=1;
}
}
}
for(int j=0;j<m;j++)
{
int sum=1;
for(int i=1;i<n;i++)
{
if(a[i][j].v==a[i-1][j].v)
sum++;
if(a[i][j].v!=a[i-1][j].v||i==n-1)
{
if(sum>=3)
for(int k=i-(a[i][j].v!=a[i-1][j].v);k>=i-(a[i][j].v!=a[i-1][j].v)-sum+1;k--)
a[k][j].flag=1;
sum=1;
}
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(a[i][j].flag==1)
cout<<0<<" ";
else
cout<<a[i][j].v<<" ";
}
cout<<endl;
}
return 0;
}
26.小明放学
#include
using namespace std;
struct light
{
int g;
int time;
};
int main()
{
int red,yellow,green;
cin>>red>>yellow>>green;
struct light info[3];
info[0].g=1;info[0].time=red;
info[1].g=3;info[1].time=green;
info[2].g=2;info[2].time=yellow;
int n;
cin>>n;
long long sum=0;
while(n--)
{
long long t;
int k,b;
cin>>k>>t;
if(k==0)
sum+=t;
else
{
b=(k>=2?-1:2)*k+(k>=2?4:-2);
if(sum<t)
t-=sum;
else if(sum==t)
{
b++;
if(b==3)
b=0;
t=info[b].time;
}
else
{
long long div=(sum-t)/(red+yellow+green);
t+=div*(red+yellow+green);
t=sum-t;
b++;
if(b==3)
b=0;
while(t>=info[b].time)
{
t-=info[b].time;
b++;
if(b==3)
b=0;
}
t=info[b].time-t;
}
if(info[b].g==1)
sum+=t;
else if(info[b].g==2)
sum+=t+red;
}
}
cout<<sum;
return 0;
}
27.小明上学
#include
using namespace std;
int main()
{
int red,yellow,green;
cin>>red>>yellow>>green;
int i,n,sum=0;
cin>>n;
for(i=0;i<n;i++)
{
int k,t;
cin>>k>>t;
if(k==0||k==1)
sum+=t;
else if(k==2)
sum+=t+red;
}
cout<<sum;
return 0;
}
28.小中大
#include
#include
#include
using namespace std;
int main()
{
int i,n;
cin>>n;
int num[n];
float middle;
for(i=0;i<n;i++)
cin>>num[i];
sort(num,num+n);
cout<<num[n-1]<<" ";
if(n%2!=0)
cout<<num[n/2]<<" ";
else
{
if((num[n/2]+num[n/2-1])%2==0)
cout<<(num[n/2]+num[n/2-1])/2<<" ";
else
cout<<fixed<<setprecision(1)<<float((num[n/2]+num[n/2-1])/2.0)<<" ";
}
cout<<num[0];
return 0;
}
29.学生排队
#include
#include
#include
using namespace std;
int main()
{
vector<int> army;
vector<int>::iterator it;
int n,op;
cin>>n>>op;
for(int i=1;i<=n;i++)
army.push_back(i);
for(int i=0;i<op;i++)
{
int a,b,x;
cin>>a>>b;
it=find(army.begin(),army.end(),a);
army.erase(it,it+1);
army.insert(it+b,a);
}
for(it=army.begin();it<army.end();it++)
cout<<*it<<" ";
return 0;
}
30.游戏
#include
#include
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
int main()
{
int n,k,judje,sum=0;
cin>>n>>k;
int flag[n+1];
mem(flag,0);
for(int i=1;;i++)
{
judje=0;
for(int j=1;j<=n;j++)
judje+=flag[j];
if(judje==n-1)
break;
if(flag[i]==1)
goto here;
sum++;
if(sum%k==0||sum%10==k)
flag[i]=1;
here:
if(i==n)
i=0;
}
for(int i=1;i<=n;i++)
if(flag[i]==0)
cout<<i<<endl;
return 0;
}
31.折点计数
#include
using namespace std;
int main()
{
int n,sum=0;
cin>>n;
int flag[2];
if(n<=2)
cout<<0;
else
{
int a,b;
cin>>a>>b;
if(a>b)
flag[0]=1;
else
flag[0]=-1;
int q=b;
for(int i=0;i<n-2;i++)
{
int p;
cin>>p;
if(q>p)
flag[1]=1;
else
flag[1]=-1;
if(flag[0]*flag[1]==-1)
sum++;
flag[0]=flag[1];
q=p;
}
cout<<sum;
}
return 0;
}
32.中间数
#include
#include
using namespace std;
int main()
{
vector<int> v,r;
vector<int>::iterator it1,it2;
int n;
cin>>n;
for(int i=0;i<n;i++)
{
int num;
cin>>num;
v.push_back(num);
}
int a,b;
for(it1=v.begin();it1<v.end();it1++)
{
a=b=0;
for(it2=v.begin();it2<v.end();it2++)
{
if(*it2>*it1)
b++;
else if(*it2<*it1)
a++;
}
if(a==b)
r.push_back(*it1);
}
if(!r.empty())
cout<<r.back();
else
cout<<-1;
return 0;
}
33.最大波动
#include
#include
using namespace std;
int main()
{
int n,max;
cin>>n;
int a[n];
cin>>a[0]>>a[1];
max=abs(a[1]-a[0]);
for(int i=2;i<n;i++)
{
cin>>a[i];
if(abs(a[i]-a[i-1])>max)
max=abs(a[i]-a[i-1]);
}
cout<<max;
return 0;
}
34.最小差值
#include
#include
using namespace std;
int main()
{
int n;
cin>>n;
int num[n];
for(int i=0;i<n;i++)
{
int a;
cin>>a;
num[i]=a;
}
int min=abs(num[0]-num[1]);
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
min=min>abs(num[i]-num[j])?abs(num[i]-num[j]):min;
cout<<min;
return 0;
}