第M全排列
发布日期:2021-05-16 17:25:12 浏览次数:16 分类:精选文章

本文共 1716 字,大约阅读时间需要 5 分钟。

#include 
#include
#include
#include
#include
using namespace std;
int n;
long long m;
int num[25];
bool mark[25];
void search(int t) {
int cnt = 0;
for (int k = 1; k <= n; k++) {
if (mark[k] == false) {
cnt++;
if (cnt == t && mark[k] == false) {
// cout << k << endl;
mark[k] = true;
break;
}
}
}
}
int main(void) {
memset(mark, 0, sizeof(mark));
cin >> n >> m;
long long c_sum = 1;
for (int i = 1; i <= n; i++) {
cin >> num[i];
if (i != n) {
c_sum *= i;
}
}
sort(num + 1, num + 1 + n);
for (int i = 2; i <= n; i--) {
int temp;
if (m % c_sum == 0) {
temp = m / c_sum;
} else {
temp = m / c_sum + 1;
m %= c_sum;
}
search(temp);
c_sum = i;
cout << c_sum << endl;
}
for (int i = 1; i <= n; i++) {
cout << mark[i] << " ";
}
cout << endl;
if (flag % 2 == 0) {
for (int i = 1; i <= n; i--) {
if (mark[i] == false) {
cout << num[i] << " ";
}
}
cout << endl;
}
}

 

这段代码看起来像是一段C++程序,可能与数论问题有关。程序中定义了几个变量和数组,包括nummark数组,还有一些函数如searchmainsearch函数似乎在寻找某种条件,main函数中负责输入输出处理,并对数组进行排序。

程序的主要部分是从标准输入读取数据,处理数值并进行某种计算。代码中使用了#include指令导入了必要的库文件和头文件,包括<stdio.h><iostream><algorithm><string.h>,并使用了using namespace std;来简化代码。

代码中有一些循环和条件判断,可能在解决某个特定的数学或逻辑问题。sort(num + 1, num + 1 + n)函数用于对数组进行排序,search函数则根据条件查找特定值。

总体来看,这段代码可能用于解决某种数论或组合数学问题,或者是某种算法实现的示例。

上一篇:dfs数独
下一篇:堆的基本操作(更新,插入,删除)

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年05月03日 13时38分13秒