小明学长给学弟的任务

题目描述

 这几天,小明学长事情比较多,一边写文件,一边思考怎么为小石坝们出既有意思,又能检验大家学习情况的题目。忙的一塌糊涂的小明学长看见石榴学弟竟然来找他闲聊!闲聊!!!聊着聊着石榴学弟随口一句:“等我看见好的题目也加上去”,“行啊”  , “。。。”(都知道做题消耗脑细胞,其实出题消耗更多脑细胞,发际线又得高了,宝宝心里苦,不想说话),,于是,石榴理所当然的认为学弟替学长分担任务是一种应该传承的美德,那么就把这道困扰石榴好久的问题交给你们了:
给定0~9的数字,求出能组成的所有各位不重复的三位数。

 

输入

多组测试数据,当n为0时输入结束且不做输出。
对于每组测试样例:第一行一个数字n(3<= n <= 10)
第二行给出 n个0~9的整数,且按照从小到大不重复的给出,用空格隔开。
 

 

输出

对于每组输入,按照从小到大输出,输出能组成的所有各位不重复的三位整数,一个整数占一行。

 

样例输入

3
1 2 3
3
4 6 8
0

 

样例输出

123
132
213
231
312
321
468
486
648
684
846
864

解题思路:

1:判断n>0是否成立,否结束,是,往下

2:输入 n个0~9的整数,且按照从小到大不重复的给出,用空格隔开。

3:将这n 个数组成各位不重复的三位整数,共6*C(n,3)个//C()表示组合

4:按从小到大输出

 

#include<iostream>
#include<algorithm>
#define num 10010
using namespace std;
long long C(int n,int m)               //组合 
{
	long long t=1;
	m=(n-m)>m?(n-m):m;
    for(int i=m+1;i<=n;i++)
    t*=i;
    for(int i=1;i<=n-m;i++)
    t/=i;
    return t;   	
} 
int main()
{
	int n;
	while(1)
	{
	  cin>>n;
	  if(n>0)
	  {
	  		int a[11];
		int b[num];
		int l=0,t;
		for(int i=0;i<n;i++)
		cin>>a[i];
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<n;j++)
			for(int k=0;k<n;k++)
			if(a[i]!=a[j]&&a[i]!=a[k]&&a[j]!=a[k])
			{
			b[l]=100*a[i]+10*a[j]+a[k];
			l++;	
		    }
		}
		t=6*C(n,3);
		sort(b,b+t);
		for(int i=0;i<t;i++)
		{
			if(b[i]>100)
		    cout<<b[i]<<endl;
		}
      }
	  else
	  break;	 
	}	
return 0;	
} 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值