根据上排给出十个数,在其下排填出对应的十个数(栈和队列)

根据上排给出十个数,在其下排填出对应的十个数(栈和队列)

时间: 1ms        内存:1000M

描述:

题目:
要求下排每个数都是先前上排那十个数在下排出现的次数。  
上排的十个数如下:  
0123456789
举一个例子,  
数值: 0,1,2,3,4,5,6,7,8,9  
分配: 6,2,1,0,0,0,1,0,0,0  
0
在下排出现了6次,1在下排出现了2次,  
2
在下排出现了1次,3在下排出现了0....

输入:

输入:

0 1 2 3 4 5 6 7 8 9

输出:

输出:

6 2 1 0 0 0 1 0 0 0

示例输入:

0 1 2 3 4 5 6 7 8 9

示例输出:

6 2 1 0 0 0 1 0 0 0

提示:

参考答案(内存最优[1100]):

#include<stdio.h>
#define LEN 10
int arr[LEN] ;//= {0,1,2,3,4,5,6,7,8,9};
int b[LEN] = {};
int get();
int get1(int num);
int main()
{
    int k,i,success = 0;
    for(i=0;i<10;i++)
        scanf("%d",&arr[i]);

    while(success == 0)
    {
        success = get();
    }
    for(i = 0; i < 9; i++)
    {
        printf("%d ",b[i]);
    }
    printf("%d\n",b[i]);
}
int get()
{
    int i,num,fre;
    int success = 1;
    for(i = 0; i < LEN; i++)
    {
        num = arr[i];
        fre = get1(num);
        if(b[i] != fre)
        {
            b[i] = fre;
            success = 0;
        }
    }
    return success;
}
int get1(int num)
{
    int i;
    int count = 0;
    for(i = 0; i < LEN; i++)
    {
        if(b[i] == num)
        {
            count++;
        }
    }
    return count;
}

参考答案(时间最优[0]):

#include <iostream>
using namespace std;
#define     Maxx 10
class NUM
{
private:
    int data[Maxx];
    int ans[Maxx];
    bool awr;
public:
    NUM();
public:
    int* input();
    void solve();
    int di(int value);
};
NUM::NUM()
{
    awr = false;
    for(int i = 0; i < Maxx; i++)
    {
        cin>>data[i];
        ans[i] =data[i];
    }
}
int* NUM::input()
{
    int i = 0;
    while(!awr)
    {
        i++;
        solve();
    }
    return ans;
}
void NUM::solve()
{
    bool flag = true;
    for(int i = 0; i < Maxx; i++)
    {
        int f = di(data[i]);
        if(ans[i] != f)
        {
            ans[i] = f;
            flag = false;
        }
    }
    awr = flag;
}
int NUM::di(int value)
{
    int n = 0;
    for(int  i = 0; i < Maxx; i++)
    {
        if(ans[i] == value)
            n++;
    }
    return n;
}
int main()
{
    NUM o;
    int* ans = o.input();
    for(int  i= 0 ; i < Maxx-1; i++)
    {
        cout << *ans++ <<" ";
    }
    cout<<*ans<<endl;
    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注