C语言 · 排列数
2024-08-23 09:49:36
算法提高 排列数
时间限制:1.0s 内存限制:256.0MB
问题描述
0、1、2三个数字的全排列有六种,按照字母序排列如下:
012、021、102、120、201、210
输入一个数n
求0~9十个数的全排列中的第n个(第1个为0123456789)。
012、021、102、120、201、210
输入一个数n
求0~9十个数的全排列中的第n个(第1个为0123456789)。
输入格式
一行,包含一个整数n
输出格式
一行,包含一组10个数字的全排列
样例输入
1
样例输出
0123456789
数据规模和约定
0 < n <= 10!
#include<stdio.h>
#include<string.h>
long long n,sum;
int label[];//用来标记数字i是否被用了,即是否已被放在了排列中
int a[];
void SouSuo(int pos){
if(pos==){ //表示当前数组a中已有10个数字
sum++;
if(sum==n){
for(int i=; i<; i++)
printf("%d",a[i]);
}
}
for(int i=; i<=; i++){//枚举数字0到数字9
if(!label[i]){//若数字i还没被放在当前排列中
a[pos]=i;//将i赋给当前排列a数组的第pos位置
label[i]=;//数字i已放入排列中,标记为1
SouSuo(pos+);//继续搜索下一个位置
label[i]=;//清除标记
}
}
}
int main(){
scanf("%d",&n);
if(n==){
return ;
}
memset(label,,sizeof(label));//给标记赋初值0
sum=;
SouSuo();
return ;
}
最新文章
- 关于通过jq /js 实现验证单选框 复选框是否都有被选中
- Spring task executor同异步
- java获取点击微信自定义菜单的用户openid
- Sublime_Tip_01
- PHP Cookies
- NOIP2012模拟试题【奶牛晒衣服】
- STM32 内部flash的读写程序
- spec文件中的 %pre %post %preun %postun
- WinForm中一个窗体调用另一个窗体
- caffe实现多任务学习
- dev gridview自动列宽和单元、行、checkbox选中和多选
- Git for Windows之分支管理、分支合并、解决分支冲突
- java微信开发之接受消息回复图片或者文本
- velocity的一些优化记录
- Top N之MapReduce程序加强版Enhanced MapReduce for Top N items
- 原创Oracle数据泵导出/导入(expdp/impdp)
- vertical-align负值和margin-bottom负值的区别
- angular 基本依赖注入
- Android之九宫格解锁的实现
- 【BZOJ4361】isn