/*201912-1 报数*/
数据:
//不要漏了a/100==7
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
int a,b,c,d;
a=0,b=0,c=0,d=0;
long long aa=0,bb=0,cc=0,dd=0;
cin>>n;
for(long long a=1;a<=n;a++){
if(a%7==0||a%10==7||a/10%10==7||a/100==7){
if(a%4==1)aa++;
else if(a%4==2) bb++;
else if(a%4==3) cc++;
else dd++;
n++;
}
}
cout<<aa<<endl;
cout<<bb<<endl;
cout<<cc<<endl;
cout<<dd<<endl;
return 0;
}
/*201912-2 回收站选址*/
7
1 2
2 1
0 0
1 1
1 0
2 0
0 1输出0
0
1
0
0
用结构体记录坐标!
用结构体
#include<bits/stdc++.h>
using namespace std;
struct node{
int x;
int y;
}t[1005];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>t[i].x >>t[i].y ;
}
int flag[1005]={0};
int a,b,c;
for(int i=0;i<n;i++){
a=t[i].x ;
b=t[i].y ;
c=0;
for(int j=0;j<n;j++){
if(a==t[j].x ){//注意是j,不是i
if(t[j].y ==b+1){
c++;
}
if(t[j].y ==b-1){
c++;
}
}
if(b==t[j].y ){
if(t[j].x ==a-1){
c++;
}
if(t[j].x ==a+1){
c++;
}
}
}
if(c==4){
flag[i]=1;
}else{
flag[i]=0;
}
}
int dust[5];
for(int i=0;i<5;i++){
dust[i]=0;
}
int d;
for(int i=0;i<n;i++){
d=0;
if(flag[i]==1){
a=t[i].x ,b=t[i].y ;
for(int j=0;j<n;j++){
if(a-1==t[j].x&&b-1==t[j].y ) d++;
if(a-1==t[j].x &&b+1==t[j].y ) d++;
if(a+1==t[j].x&&b-1==t[j].y ) d++;
if(a+1==t[j].x&&b+1==t[j].y ) d++;
}
dust[d]++;
}
}
for(int i=0;i<5;i++){
cout<<dust[i]<<endl;
}
return 0;
}
/*201909-1小明种苹果*/
统计果实,疏果个数,输出剩余、最多的果疏次序、疏果数
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
int sum=0,max=0,t=0,s,flag,p=0;
for(int i=0;i<n;i++){
cin>>s;
sum=0;
for(int j=0;j<m;j++){
cin>>t;
sum+=abs(t);
}
if(sum>max){
max=sum;
flag=i;
}
p+=(s-sum);
}
cout<<p<<" "<<flag+1<<" "<<max<<endl;
return 0;
}
201909-2小明种苹果(续)
/*
4
4 74 -7 -12 -5
5 73 -8 -6 59 -4
5 76 -5 -10 60 -2
5 80 -6 -15 59 0
5
4 10 0 9 0
4 10 -2 7 0
2 10 0
4 10 -3 5 0
4 10 -1 8 0
*/
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,D=0;
long long t,s,sum=0;
cin>>n;
int flag[1005];
memset(flag,0,sizeof(flag));
for(int k=0;k<n;k++){
cin>>m;
cin>>s;//果数
for(int j=1;j<m;j++){
cin>>t;//操作
if(t<=0){
s=s+t;
}
else if(s!=t){
flag[k]=1;
s=t;
//注意:不可以用D++;因为一棵树可以有多次掉落
}
}
sum+=s;//统计个数
}
int E=0;
for(int i=0;i<n;i++){
D+=flag[i];
if(flag[i]&&flag[(i+1)%n]&&flag[(i-1+n)%n]){//注意这里
E++;
}
}
cout<<sum<<" "<<D<<" "<<E<<endl;
return 0;
}
201903-1 小中大
/*
4
-2 -1 3 4
3
-1 2 4
*/
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
int a[100005];
cin>>n;
double m;
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
if(n%2==0){
m=(a[(n-1)/2]+a[n/2])/2.0;
}
else{
m=a[(n-1)/2];
}
// cout<<m<<endl;
if((int)(m*10)==(int)m*10)//(a[(n-1)/2]+a[n/2])%2==0
printf("%d %.0f %d\n",a[n-1],m,a[0]);
else
printf("%d %.1f %d\n",a[n-1],m,a[0]);
return 0;
}
201903-2 二十四点
#include<bits/stdc++.h>
#include<stack>
using namespace std;
#define SIZE 85000
int main(){
int n;
cin>>n;
stack<int>shu;
string str;
for(int i=0;i<n;i++){
cin>>str;
for(int j=0;j<str.length();j++){
if(str[j]>='0'&&str[j]<='9'){
shu.push(str[j]-'0');
}
else if(str[j]=='+'){
shu.push(str[j+1]-'0');
j++;
}
else if(str[j]=='-'){
shu.push((str[j+1]-'0')*(-1));
j++;
}
else if(str[j]=='x'){
int p,q;
p=shu.top();
shu.pop();
q=str[j+1]-'0';
int t=p*q;
shu.push(t);
j++;
}
else if(str[j]=='/'){
int p,q;
p=shu.top();
shu.pop();
q=str[j+1]-'0';
int t=(p)/(q);
shu.push(t);
j++;
}
}int k,sum=0;
while(!shu.empty()){
k=shu.top();
shu.pop();
sum+=k;
}
if(sum==24) printf("Yes\n");
else printf("No\n");
}
return 0;
}
201812-1 小明上学
#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
#include<vector>
#define ll long long
using namespace std;
int main()
{
int n;
int r,y,g;
cin>>r>>y>>g;
cin>>n;
int s,t,sum=0;
while(n--){
cin>>s>>t;
if(s!=3)
sum+=t;
if(s==2)
sum+=r;
}
cout<<sum<<endl;
return 0;
}
201812-2 小明放学
此题注意是 long long
#include<iostream>
using namespace std;
typedef long long ll;
ll r,y,g;
//初始状态为k,时间为t,经过time时间后,还需多长时间才能通过,返回需要的时间
ll add(ll k,ll t,ll time)
{
if(k==0) return t;//k=0,直接返回时间t
//求出t时间在红绿黄时间轴上的时间
if(k==1)
t=r-t;
else if(k==2)
t=r+g+y-t;
else if(k==3)
t=r+g-t;
//求出t+time时间在红绿黄时间轴上的时间,由于是循环,因此 %(r+g+y)
t=(t+time)%(r+g+y);
if(0<=t&&t<r)//经过time时间后红灯,且过了t秒,还需等待r-t秒就能通行
return r-t;
else if(r<=t&&t<r+g)//经过time时间后绿灯,不用等待直接通行
return 0;
else if(r+g<=t&&t<r+g+y)经过time时间后黄,且过了t秒,还需等待r+g+y-t+r秒就能通行
return (r+g+y-t+r);
}
int main()
{
ll n,ans=0,k,t;
scanf("%lld%lld%lld%lld",&r,&y,&g,&n);
while(n--)
{
scanf("%lld%lld",&k,&t);
ans+=add(k,t,ans);
}
printf("%lld\n",ans);
return 0;
}
试题编号: 201809-1 试题名称: 卖菜
#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
#include<vector>
#define ll long long
using namespace std;
int main()
{
int n;
int r,y,g;
cin>>n;
int a[1001],b[1001];
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
if(i==0){
b[0]=(a[0]+a[1])/2;
}
else if(i==n-1){
b[n-1]=(a[n-2]+a[n-1])/2;
}else{
b[i]=(a[i-1]+a[i+1]+a[i])/3;
}
}
for(int i=0;i<n-1;i++){
cout<<b[i]<<" ";
}
cout<<b[n-1]<<endl;
return 0;
}
试题编号: 201809-2 试题名称: 买菜
把条件写全
#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
#include<vector>
#define ll long long
using namespace std;
struct node{
int x;
int y;
};
bool cmp(node a,node b){
if(a.x !=b.x )
return a.x <b.x ;
else if(a.x ==b.x ){
a.y <b.y ;
}
}
node a[2002],b[2002];
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i].x >>a[i].y ;
}
sort(a,a+n,cmp);
for(int i=0;i<n;i++){
cin>>b[i].x >>b[i].y ;
}
sort(b,b+n,cmp);
int cnt=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(a[i].y >b[j].x&&a[i].x <b[j].y &&a[i].y <b[j].y &&a[i].x <b[j].x ){//||a[i].x <b[j].y ){
cnt+=a[i].y -b[j].x;
}else if(a[i].x >=b[j].x &&a[i].y <=b[j].y ){
cnt+=a[i].y-a[i].x ;
}else if(b[j].x >=a[i].x &&b[j].y <=a[i].y){
cnt+=b[j].y -b[j].x ;
}else if(b[j].y >a[i].x&&b[j].x <a[i].y&&b[j].y <a[i].y&&b[j].x <a[i].x ){
cnt+=b[j].y -a[i].x ;
}
}
//cout<<cnt<<endl;
}
cout<<cnt<<endl;
return 0;
}
试题编号: | 201803-1 |
试题名称: | 跳一跳 |
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[31],sum=0,k=0,flag=1;
while(~scanf("%d",&a[k])){
if(a[k]==0) break;
k++;
}
for(int i=0;i<k;i++){
if(i==0&&a[i]==1) {
flag=1;
sum+=1;
}
else if(i==0&&a[i]==2) {
flag=1;
sum+=2;
}
else if(a[i-1]==1&&a[i]==1){
flag=1;
sum+=1;
}else if(a[i-1]==1&&a[i]==2){
flag=1;
sum+=2;
}else if(a[i-1]==2&&a[i]==2){
flag++;
sum+=2*flag;
} else if(a[i-1]==2&&a[i]==1){
sum+=1;
}
// cout<<sum<<endl;
}
cout<<sum<<endl;
return 0;
}
试题编号: | 201803-2 |
试题名称: | 碰撞的小球 |
#include<bits/stdc++.h>
using namespace std;
struct node{
int x;
int flag;
}p[1001];
int main(){
int n,m,t;
cin>>n>>m>>t;
for(int i=0;i<n;i++){
cin>>p[i].x;
p[i].flag =1;
}
for(int i=0;i<t;i++){
for(int j=0;j<n;j++){
if(p[j].x ==0||p[j].x ==m){
p[j].flag =-1;
}
p[j].x+=p[j].flag ;
}
for(int j=0;j<n;j++){
for(int k=0;k<n&&k!=j;k++){
if(p[j].x ==p[k].x ){
p[j].flag =-p[j].flag;
p[k].flag=-p[k].flag;
}
}
}
}
for(int i=0;i<n;i++){
cout<<p[i].x <<" ";
}
return 0;
}
试题编号: | 201712-1 |
试题名称: | 最小差值(太水) |
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,max=9999999,flag;
cin>>n;
int a[1001];
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
for(int i=0;i<n-1;i++){
if((abs)(a[i]-a[i+1])<max){
max=(abs)(a[i]-a[i+1]);
}
}
cout<<max<<endl;
return 0;
}
试题编号: | 201712-2 |
试题名称: | 游戏 |
考虑k=1的情况
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,k,max=9999999,flag,t=0;
cin>>n>>k;
int a[1001];
for(int i=0;i<n;i++){
a[i]=i+1;
}
if(k==1){
cout<<n<<endl;
return 0;
}
int i,cnt=0;
flag=n;
while(cnt<n-1){
for( i=0;i<n;i++){
if(a[i]%k==0||a[i]%10==k){
a[i]=-1;
cnt++;
}
}
if(cnt==n-1){
break;
}
if(i==n){
for(int j=0;j<n;j++){
if(a[j]!=-1)
a[j]=flag+1+(t++);
}
}
}
for(int i=0;i<n;i++){
//cout<<a[i]<<endl;
if(a[i]!=-1){
cout<<i+1<<endl;
}
}
return 0;
}
试题编号: | 201709-1 |
试题名称: | 打酱油 |
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
cout << n / 10 + n / 50 * 2 + n % 50 / 30;
return 0;
}
试题编号: | 201709-2 |
试题名称: | 公共钥匙盒 |
#include<bits/stdc++.h>
using namespace std;
struct node{
int end;
int id;
int flag;
};
bool cmp(node a,node b){
if(a.end !=b.end )
return a.end <b.end ;
else{
if(a.flag !=b.flag )
return a.flag <b.flag ;
else
return a.id <b.id ;
}
}
node key[2001];//!!!!!!!!!!!
int main(){
int n,m,a,b,c;
int t[1001];
cin>>n>>m;
for(int i=1;i<=n;i++){
t[i] =i;
}
for(int j=0;j<m;j++){
cin>>a>>b>>c;
key[2*j].id =a;
key[2*j].end =b;
key[2*j].flag =1;//借
key[2*j+1].id =a;
key[2*j+1].end =b+c;
key[2*j+1].flag =-1;//还
}
sort(key,key+2*m,cmp);
for(int i=0;i<2*m;i++){
if(key[i].flag ==1){
for(int j=1;j<=n;j++){
if(key[i].id ==t[j]){
t[j]=0;
}
}
}
else{
for(int j=1;j<=n;j++){
if(t[j]==0){
t[j]=key[i].id ;
break;
}
}
}
}
for(int i=1;i<=n;i++){
if(i!=1)
cout<<" "<<t[i];
else
cout<<t[i];
}
cout<<endl;
return 0;
}
试题编号: | 201703-1 |
试题名称: | 分蛋糕 |
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main()
{
int n,k;
int a[1001];
cin>>n>>k;
for(int i=0;i<n;i++){
cin>>a[i];
}
int sum=0,cnt=0;
for(int i=0;i<n;i++){
sum+=a[i];
if(sum>=k){
cnt++;
sum=0;
}
else if(i==n-1&&sum<=k){
cnt++;
}
}
cout<<cnt<<endl;
return 0;
}
试题编号: | 201703-2 |
试题名称: | 学生排队(分情况m正负) |
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main()
{
int n,p,m,t,a[1001],flag;
cin>>n;
cin>>t;
for(int i=1;i<=n;i++) a[i]=i;
for(int i=0;i<t;i++){
cin>>p>>m;
if(m>0){
for(int k=1;k<=n;k++) {
if(p==a[k])
{
p=k;
break;
}
}
flag=a[p];
for(int j=p;j<p+m;j++){
a[j]=a[j+1];
}
a[p+m]=flag;
}
else if(m<0){
//cout<<"p="<<p<<",m="<<m<<endl;
for(int k=1;k<=n;k++) {
if(p==a[k])
{
p=k;
break;
}
}
// cout<<p<<endl;
flag=a[p];
for(int j=p;j>p+m;j--){
a[j]=a[j-1];
}
a[p+m]=flag;
}
}
for(int i=1;i<=n-1;i++) {
cout<<a[i]<<" " ;
}
cout<<a[n]<<endl;
return 0;
}
#include<stdio.h>
#include<vector>
using namespace std;
vector<int> stu;
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
stu.push_back(i);
}
int no,pos;
vector<int>::iterator it;
while(m--){
scanf("%d%d",&no,&pos);
for(it=stu.begin();it!=stu.end();it++){
if(*it==no){
it=stu.erase(it);
stu.insert(it+pos,no);
break;
}
}
}
for(it=stu.begin();it!=stu.end();it++){
printf("%d ",*it);
}
return 0;
}
试题编号: | 201612-1 |
试题名称: | 中间数 |
#include<bits/stdc++.h>
using namespace std;
vector<string> v;
int main(){
int n,a[1001];
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
int l=0,r=0;
for(int i=0;i<n/2;i++){
if(a[i]<a[n/2]) l++;
}
for(int i=n/2+1;i<n;i++){
if(a[i]>a[n/2]) r++;
}
if(l==r) cout<<a[n/2]<<endl;
else cout<<"-1"<<endl;
return 0;
}
试题编号: | 201612-2 |
试题名称: | 工资计算 |
#include<stdio.h>
#define MAXN 200000
int main(){
int T;
scanf("%d",&T);
if(T<=3500) printf("%d\n",T);
else for(int S=3600;S<=MAXN;S+=100){
int A=S-3500;
int tax=0;
if(A>1500) tax+=1500*0.03;
else {tax+=A*0.03;goto end;}
if(A>4500) tax+=3000*0.10;
else {tax+=(A-1500)*0.10;goto end;}
if(A>9000) tax+=4500*0.20;
else {tax+=(A-4500)*0.20;goto end;}
if(A>35000) tax+=26000*0.25;
else {tax+=(A-9000)*0.25;goto end;}
if(A>55000) tax+=20000*0.30;
else {tax+=(A-35000)*0.30;goto end;}
if(A>80000) tax+=25000*0.35;
else {tax+=(A-55000)*0.35;goto end;}
tax+=(A-80000)*0.45;
end:
if(S-tax==T){
printf("%d\n",S);
break;
}
}
return 0;
}
试题编号: | 201609-1 |
试题名称: | 最大波动 |
水题
#include<bits/stdc++.h>
using namespace std;
#define MAXN 200000
int main(){
int n,a[1001];
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
int max=0;
for(int i=1;i<n;i++){
if(abs(a[i]-a[i-1])>max){
max=abs(a[i]-a[i-1]);
}
}
cout<<max<<endl;
return 0;
}
试题编号: | 201609-2 |
试题名称: | 火车购票 |
仔细想想 开辟数组空间a[21][7]
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
using namespace std;
int main(){
int n,t,a[21][7];
memset(a,0,sizeof(a));
for(int i=0;i<20;i++) a[i][5]=5;
scanf("%d",&n);
while(n--){
scanf("%d",&t);
int flag=0;
for(int i=0;i<20;i++){
if(a[i][5]>=t){
a[i][5]-=t;
for(int j=0;j<5;j++){
if(!a[i][j]){
a[i][j]=1;
t--;
if(t) printf("%d ",i*5+j+1);
else{
if(n) printf("%d\n",i*5+j+1);
else printf("%d",i*5+j+1);
flag=1;
break;
}
}
}
}
if(flag) break;
}
if(!flag){//无连续的座位
for(int i=0;i<20;i++){
for(int j=0;j<5;j++){
if(!a[i][j]){
a[i][j]=1;
t--;
a[i][5]--;
if(t) printf("%d ",i*5+j+1);
else{
if(n) printf("%d\n",i*5+j+1);
else printf("%d",i*5+j+1);
flag=1;
break;
}
}
}
if(flag) break;
}
}
}
return 0;
}
/*从前向后遍历数组的每一行,如果该行的空余数量大于等于t,遍历该行,输出连续座位,break
否则,从第一行空位开始往下数t个,输出并标记*/
试题编号: | 201604-1 |
试题名称: | 折点计数(不用复习) |
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a[1001],cnt=0;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=1;i<n-1;i++){
if(a[i-1]>a[i]&&a[i]<a[i+1]){
cnt++;
}else if(a[i-1]<a[i]&&a[i]>a[i+1]){
cnt++;
}
}
cout<<cnt<<endl;
return 0;
}
试题编号: | 201604-2 |
试题名称: | 俄罗斯方块 |
固定行,固定列
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[15][10];
int t[4][4],n;
for(int i=0;i<15;i++){
for(int j=0;j<10;j++){
cin>>a[i][j];
}
}
int flag=0,flag1=0;
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
cin>>t[i][j];
}
}
cin>>n;
for(int i=0;i<4;i++){
if(t[i][0]!=0) flag=1;
}
int i,j,p=4;
for( i=0;i<4;i++){
flag1=0;
for(j=0;j<4;j++){
if(t[3-i][j]!=0){
flag1=1;
break;
}
}
if(flag1==0){
p--;
}else if(flag1==1){
break;
}
}
int x,y,k;
x=0;y=0;
if(flag==1){
for(k=11+4-p;k<15;k++){
for( j=n-1;j<n-1+4;j++){
if(a[k][j]==0)
a[k][j]=t[x][y];
else a[k][j]=1;
y++;
}
x++;
}
} else{
for( k=11+4-p;k<15;k++){
y=1;
for(int j=n;j<n-1+4;j++){
if(a[k][j]==0)
a[k][j]=t[x][y];
else a[k][j]=1;
y++;
}
x++;
}
}
for(int i=0;i<15;i++){
for(int j=0;j<10;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;
return 0;
}
试题编号: | 201512-2 |
试题名称: | 消除类游戏 |
两个数组
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,a[31][31],b[31][31];
cin>>n>>m;
memset(b,0,sizeof(b));
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>a[i][j];
}
}
for(int i=1;i<n-1;i++){
for(int j=0;j<m;j++){
if(a[i][j]==a[i+1][j]&&a[i][j]==a[i-1][j]){
b[i][j]=b[i-1][j]=b[i+1][j]=1;
}
}
}
for(int i=1;i<m-1;i++){
for(int j=0;j<n;j++){
if(a[j][i-1]==a[j][i]&&a[j][i]==a[j][i+1]){
b[j][i-1]=b[j][i]=b[j][i+1]=1;
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(b[i][j]){
a[i][j]=0;
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}