2021年下学期《C语言程序设计》作业6-数组2
Description | ||
数位不同的数题目描述数位不同的数是指所有数位上的数码都不一样的数,比如“123”三个数码1,2,3,都不一样,所以是数位不同的数;但是“1232”中有两个相同的数码2,所以不是。请写一个程序,计算第几个符合条件的数是什么? 输入每行输入一个整数n(1≤n≤8877691)。 输出每行输出一个整数,为对应样例的结果。 |
我用的是深度优先算法写的,也叫dfs。
#include<stdio.h> //坑
#include<math.h> //坑
#include<string.h>
long long int biao[8877700];//存储满足题意的数字
int t = 1;//满足题意的数的序号
int pd[10];//检查是否已用某单个数字
void dfs(int n, int m, long long int ans) {
if (n == m - 1) {
biao[t] = ans;
t++;
return ;
}
//这是跳出递归的条件哦,也就是说,如果已经搜索完第n位了那就把它存起来
for (int i = 0; i <= 9; i++) {
if (n != 1 && m == 1 && i == 0) continue;//多位数的开头不能为0
if (pd[i] == 0) {
pd[i] = 1;
dfs(n, m + 1, ans * 10 + i);
pd[i] = 0;
}
}
}
int main() {
int n;
for (int i = 1; i <= 10; i++) {
dfs(i, 1, 0);
}
while (scanf("%d", &n) != EOF) {
printf("%lld\n", biao[n]);
}
}