现在的位置: 首页 > 综合 > 正文

6 给你 10 分钟时间,根据上排给出十个数,在其下排填出对应的十个数

2018年01月19日 ⁄ 综合 ⁄ 共 777字 ⁄ 字号 评论关闭
/*
第 6  题
腾讯面试题:
给你 10  分钟时间,根据上排给出十个数,在其下排填出对应的十个数
要求下排每个数都是先前上排那十个数在下排出现的次数。
上排的十个数如下:
【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  次....
以此类推..

http://blog.csdn.net/wcyoot/article/details/6428305

1)如果上排数列中有0,此时如果上排数列中无0,1,2,n-4这四个数,则下排数列无解;
否则下排数列中0出现的次数为n-4;1出现的次数为2;2出现的次数为1;n-4出现的次数为1;其余为0。
2)如果上排数列中无0,则下排数列全0,是其唯一解。

10 
0 1 2 3 4 5 6 7 8 9
6
0 1 4 3 2 2
*/

//未判断无解 
#include<iostream>
#include<stdio.h>
using namespace std;

int a[100];

int main()
{
	int n,i,f;
	while(scanf("%d",&n))
	{
		f=0;
		for(i=0;i<n;i++)
		{
			scanf("%d",&a[i]);
			if(a[i]==0) f=1;	
		}
		
		if(f==0)
		{
			for(i=0;i<n-1;i++)
				printf("0 ");
			printf("0\n");
		}
		else 
		{
			for(i=0;i<n;i++)
			{
				if(a[i]==0) printf("%d ",n-4);
					else if(a[i]==1) printf("2 ");
						else if(a[i]==2||a[i]==n-4) printf("1 ");
							else  printf("0 ");
				if(i==n-1) printf("\n");
			}
		}
	}
	return 0;
} 

抱歉!评论已关闭.