今天的数学课让你感到很无聊。于是你打算在纸上写下所有n位不含重复数字的数,来打发时间。
例如:你打算写6位数,那么你会写下127643;而123347含重复的3,你不会写下它。
你决定由小到大写出每个数,并且你不会考虑含前导0的n位数。
输入
输入一个数n,表示你打算写n位数。
输出
每行输出一个数,表示你所写下的n位数。
数据范围
对于100%的数据,1≤n≤8;
输入样例
1
输出样例
1
2
3
4
5
6
7
8
9
今天的数学课让你感到很无聊。于是你打算在纸上写下所有n位不含重复数字的数,来打发时间。
例如:你打算写6位数,那么你会写下127643;而123347含重复的3,你不会写下它。
你决定由小到大写出每个数,并且你不会考虑含前导0的n位数。
输入
输入一个数n,表示你打算写n位数。
输出
每行输出一个数,表示你所写下的n位数。
数据范围
对于100%的数据,1≤n≤8;
输入样例
1
输出样例
1
2
3
4
5
6
7
8
9
这个应该能过了!
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int n=0,a=0,b=0;
scanf("%d",&n);
if(n==1)
a=1,b=9;
if(n==2)
a=10,b=98;
if(n==3)
a=102,b=987;
if(n==4)
a=1023,b=9876;
if(n==5)
a=10234,b=98765;
if(n==6)
a=102345,b=987654;
if(n==7)
a=1023456,b=9876543;
if(n==8)
a=10234567,b=98765432;
for(int i=a; i<=b; i++) //遍历所有n位数
{
int arr[10]= {0};
int index=0,num=i,flag=1;
while (num>0)
{
index = num % 10;
if (arr[index])
{
flag=0;
break;
}
arr[index] = 1;
num /= 10;
}
if(flag)
printf("%d\n",i);
}
return 0;
}