根据上排给出十个数,在其下排填出对应的十个数(栈和队列)
时间: 1ms 内存:1000M
描述:
题目:
要求下排每个数都是先前上排那十个数在下排出现的次数。
上排的十个数如下:
【0,1,2,3,4,5,6,7,8,9】
举一个例子,
数值: 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;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。