CCF2017——1,2题题解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/arthu6/article/details/84644466

3.1题   分蛋糕 

思路简介:取一变量sum计每个小朋友的蛋糕重量,大于等于则计数器加一,小于则从蛋糕数组中继续往后取,直到蛋糕取完为止。

#include<iostream>
using namespace std;
int main()
{
    int n,k,i;
    int a[1005];
    cin>>n>>k;
    for(i=0;i<n;i++)
        cin>>a[i];
    int num=0,sum;
    i=0;
    while(i<n)
    {
        sum=0;//计重器清零
        for(;i<n;i++)
        {
            sum+=a[i];
            if(sum>=k) break;
        }
        num++;//计数器
        i++;
    }
    cout<<num<<endl;
    return 0;
}

截图:

3.2题:

学生排队

思路:先用函数得到要移动数字在数组的位置,再根据移动方向及大小移动数据,为正就将当前位置到目标位置段数组整体前移,为负就将当前位置到目标位置段数组整体后移,尤其要注意下标之间的对应关系。

代码:

#include<iostream>
#include<algorithm>
using namespace std;
int p[1005],q[1005];
int a[1005];
int Find(int b,int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        if(a[i]==b) return i;
    }
}
int main()
{
    int n,m,i,k,j,t;
    cin>>n>>m;
    for(i=0;i<m;i++)
    {
        cin>>p[i]>>q[i];
    }
    for(i=0;i<n;i++)
    {
        a[i]=i+1;
    }
    for(i=0;i<m;i++)
    {
       j=Find(p[i],n);
       t=a[j];
       if(q[i]>=0)
       {
           for(k=j;k<j+q[i];k++)
           {
               a[k]=a[k+1];
           }
           a[k]=t;
       }
        if(q[i]<0)
       {
           for(k=j;k>j+q[i];k--)
           {
               a[k]=a[k-1];
           }
           a[k]=t;
       }
    }
    for(i=0;i<n;i++)
        cout<<a[i]<<" ";
    cout<<endl;
    return 0;
}

12.2

游戏

思路:用队列模拟即可

代码:

#include<iostream>
#include<queue>
using namespace std;
int main()
{
    int n,k,i,t,u;
    queue<int> q;
    cin>>n>>k;
    for( i=1;i<=n;i++)
    {
        q.push(i);
    }
    t=1;u=1;
    while(!q.empty())
    {
        u=q.front();//存放当前取得数字
        q.pop();
        if((t%k==0)||t%10==k);
        else q.push(u);//不出队,重新跟着站好
        t++;
    }
    cout<<u<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/arthu6/article/details/84644466
今日推荐