练习整理(2)

门禁系统:

#include <bits/stdc++.h>
using namespace std;
//记录当前出现几次 

int a[1000]={0};
int main()
{
    int n,t;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>t;
        a[t]++;
        cout<<a[t]<<" ";
    }
    return 0;
} 

碰撞的小球:

#include <bits/stdc++.h>
using namespace std;

int x[101];
int v[101];
int main()
{
    int n,l,t;
    cin>>n>>l>>t;
    for(int i=1;i<=n;i++)
    {
        cin>>x[i];
        v[i]=1;
        if(x[i]==l||x[i]==0)
          v[i]=-v[i];
    }
    for(int i=0;i<t;i++)
    {
        for(int j=1;j<=n;j++)
        {
            x[j]+=v[j];
            if(x[j]==l||x[j]==0)
              v[j]=-v[j];
        }
        for(int j=1;j<n;j++)
        {
            for(int f=j+1;f<=n;f++)
            {
                if(x[j]==x[f])
                {
                    v[j]=-v[j];
                    v[f]=-v[f];
                }
            }
        }
    }
    for(int i=1;i<=n;i++)
    {
        cout<<x[i]<<" ";
    }
    return 0;
} 

日期计算:

#include <bits/stdc++.h>
using namespace std;

int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
    int y,d,month=0,day;
    int sum=0;
    cin>>y>>d;
    if((y%4==0&&y%100!=0)||(y%400==0))
    {
        a[2]=29;
    }
    for(int i=1;i<13;i++)
    {
        if(d-a[i]>0)
        {
            month++;
            d-=a[i];
        }
        else
        {
            month++; 
            day=d;
            break;
        }        
    }
    cout<<month<<endl;
    cout<<day<<endl;
    return 0;
} 

数列分段:

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n,a,b,result=1;
    cin>>n;
    cin>>a;
    for(int i=1;i<n;i++)
    {
        cin>>b;
        if(b!=a)result++;
        a=b;
    }
    cout<<result;
    return 0;
} 

数位之和:

#include <bits/stdc++.h>
using namespace std;

//数位之和:用字符串做->简化 
int main()
{
    string n;
    int result=0;
    cin>>n;
    for(int i=0;i<n.length();i++)
    {
        result+=n[i]-'0';
    } 
    cout<<result;
    return 0;
}

数字排序:

#include <bits/stdc++.h>
using namespace std;

struct node
{
    int key;
    int num;
};

bool cmp(node v1,node v2)
{
    if(v1.num!=v2.num)
      return v1.num>v2.num;
    else if(v1.num==v2.num)
      return v1.key<v2.key;
}
int main()
{
    vector<node> v;
    map<int,int> m;
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        int temp;
        cin>>temp;
        m[temp]++;
    }
    for(map<int,int>::iterator it=m.begin();it!=m.end();it++)
    {
        node temp;
        temp.key=it->first;
        temp.num=it->second;
        v.push_back(temp);
    }
    sort(v.begin(),v.end(),cmp);
    for(vector<node>::iterator it=v.begin();it!=v.end();it++)
    {
        cout<<it->key<<" "<<it->num<<endl;
    }
    return 0;
} 

跳一跳:

#include <bits/stdc++.h>
using namespace std;

int a[30]={0}; 
int main()
{
    int t;
    int flag;
    int score=0;
    cin>>t;
    flag=1;
    while(t!=0)
    {
        if(t==1)//跳至方格边缘 
        {
            score+=1; 
            flag=1;
        }
        else if(t==2)//跳至方格中心 
        {
            if(flag==1)score+=2;
            else score+=(2*flag);
            flag++;
        }
        cin>>t;
    }
    cout<<score;
    return 0;
} 

图像旋转:

#include <bits/stdc++.h>
using namespace std;
//(i,j)->(m-j-1,i)
int a[1000][1000];
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=0;i<n;i++)
       for(int j=0;j<m;j++)
          cin>>a[i][j]; 
    for(int i=0;i<m;i++)
    {
       for(int j=0;j<n;j++)
          cout<<a[j][m-i-1]<<" ";
       cout<<endl;
    }
    return 0;
} 

相反数:

#include <bits/stdc++.h>
using namespace std;

int main()
{
    set<int> st;
    int n,x,result=0;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>x;
        st.insert(x);
        if(st.count(-x)==1)
        {
            result++;
        }
    }
    cout<<result;
    return 0;
} 

相邻数对:

#include <bits/stdc++.h>
using namespace std;

int a[1000]={0};
int main()
{
    int n,result=0,t;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    sort(a,a+n);
    for(int i=0;i<n-1;i++)
    {
        if(a[i]+1==a[i+1])result++;
    }
    cout<<result;
    return 0;
} 

消除类游戏:

#include <bits/stdc++.h>
using namespace std;
//颜色1-9编号 
int a[30][30];
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            cin>>a[i][j];
        }
    }
    //行中消除
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m-2;j++)
        {
            if(abs(a[i][j])==abs(a[i][j+1])&&abs(a[i][j])==abs(a[i][j+2]))
            {
                if(a[i][j]>0)
                a[i][j]=-a[i][j];
                if(a[i][j+1]>0)
                a[i][j+1]=-a[i][j+1];
                if(a[i][j+2]>0)
                a[i][j+2]=-a[i][j+2];
            }
        }
    } 
    //列中消除
    for(int j=0;j<m;j++)
    {
        for(int i=0;i<n-2;i++)
        {
            if(abs(a[i][j])==abs(a[i+1][j])&&abs(a[i][j])==abs(a[i+2][j]))
            {
                if(a[i][j]>0)
                a[i][j]=-a[i][j];
                if(a[i+1][j]>0)
                a[i+1][j]=-a[i+1][j];
                if(a[i+2][j]>0)
                a[i+2][j]=-a[i+2][j];
            }
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(a[i][j]<0)a[i][j]=0;
            cout<<a[i][j]<<" ";
        } 
        cout<<endl;
    }
    return 0;
} 

学生排队:

#include <bits/stdc++.h>
using namespace std;

int a[1001];
int main()
{
    int n,m,p,q,index;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        a[i]=i;
    }
    for(int i=0;i<m;i++)
    {
        cin>>p>>q;
        for(int j=1;j<=n;j++)
        {
            if(a[j]==p)
              index=j;
        }
        if(q>0)
        {
            for(int j=0;j<q;j++)
            {
                a[j+index]=a[j+index+1];
            }
            a[index+q]=p;
        }
        else
        {
            for(int j=0;j<-q;j++)
            {
                a[index-j]=a[index-j-1];
            }
            a[index+q]=p;
        }
    }
    for(int i=1;i<=n;i++)
    {
        cout<<a[i]<<" ";
    }
    return 0;
} 

游戏:

#include <bits/stdc++.h>
using namespace std;

int a[1001]={0};
int main()
{
    int n,k,result;
    cin>>n>>k;
    int sum=0;
    int t=0;
    while(t!=n-1)
    {
        for(int i=1;i<=n;i++)
        {
            if(a[i]==0)
            {
                sum++;
                if(t==n-1) break;                
                if(sum%k==0||sum%10==k)
                {
                    a[i]=1;
                    t++;
                }
            }
        }
    }
    for(int i=0;i<=n;i++)
    {
        if(a[i]==0)result=i;
    }
    cout<<result; 
    return 0;
} 

 

折点计数:

#include <bits/stdc++.h>
using namespace std;

int a[1000];
int main()
{
    int n,result=0;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    for(int i=1;i<n-1;i++)
    {
        if((a[i]>a[i-1]&&a[i]>a[i+1])||(a[i]<a[i-1]&&a[i]<a[i+1]))
          result++;
    }
    cout<<result;
    return 0;
} 

中间数:

#include <bits/stdc++.h>
using namespace std;

int a[1001];
int main()
{
    int n;
    int result;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    sort(a+1,a+n+1);
    int t=a[n/2+1];
    int less=0,more=0;
    for(int i=1;i<=n;i++)
    {
        if(a[i]<t)less++;
        if(a[i]>t)more++;
    }
    if(less==more)result=t;
    else result=-1;
    cout<<result;
    return 0;
} 

最大波动:

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n,a,b;
    cin>>n;
    int max=0;
    cin>>a;
    for(int i=1;i<n;i++)
    {
        cin>>b;
        if(fabs(a-b)>max) max=fabs(a-b);
        a=b;
    }
    cout<<max;
    return 0;
} 

最小差值:

#include <bits/stdc++.h>
using namespace std;

int a[1000];
int main()
{
    int n;
    cin>>n;
    int min=2147483647,maxIndex;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    for(int i=0;i<n-1;i++)
    {
        for(int j=i+1;j<n;j++)
        {
            if(fabs(a[i]-a[j])<min)
               min=fabs(a[i]-a[j]);
        }
    }
    cout<<min;
    return 0;
}

 

posted @ 2021-04-29 22:05  知马力lly  阅读(33)  评论(0编辑  收藏  举报
Document