- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我附上了一段代码,它根据 cout 语句给出了奇怪的输出。该程序主要计算 Knuth 的排列。
输入是说:run1代码运行良好,第一次通过:调用跟踪将是:
r un1
你的 n1
努尔 1
1nur
n1ur
nu1r
nur1
在这段代码运行之后,调用正确返回到步骤 where
urn 1
在那里,但它不处理“RETURN”语句下面的代码。
此外,如果在完成排列的循环中假设有一个 cout,它甚至不会在 return 语句下面打印 cout
请让我知道我的代码是否存在任何基本缺陷或逻辑错误?
#include <iostream>
using namespace std;
void swap( char *l, char *m )
{
char t = *l;
*l = *m;
*m = t;
}
void Permute( char *result, char *temp, int len )
{
int k = 0;
int j = 0;
char d[ 1000000];
int i = 0;
//cout << " Start of Perm " << result << " Stack: " << temp << endl;
while( result[ i ] != '\0' )
{
if( temp[ k ] !='\0' )
{
cout << " Start of Perm " << result << " Stack: " << temp << endl;
strncpy( d, &temp[ k ], sizeof( char ) );
strncat( d, result, sizeof( result ) );
strncat( d, "\0", sizeof( char ) );
cout << " Principal: " << d << endl;
k = k + 1;
if( temp[ k ] != '\0' )
Permute( d, &temp[ k ], len );
else
{
char d1[ 10000 ];
strncpy( d1, &temp[ k ], sizeof( char ) );
strncat( d1, d, sizeof( d ) );
strncat( d, "\0", sizeof( char ) );
strncpy( d, d1, sizeof( d ) );
//cout << "Final Level: " << d << endl;
strncpy( result, d, sizeof( d ) );
}
}
//cout << strlen( result ) << " == length which is " << len << " and result is: " << result << endl;
if( strlen( result ) >= len )
{
//cout << " Permutation Sets" << endl;
char result1[ 1000 ];
memcpy( result1, result, sizeof( result ) );
for( int p = 0; result1[ p ] != '\0'; p++ )
{
cout << "End : " << result1 << endl;
if( result1[ p + 1 ] != '\0' )
swap( &result1[ p ], &result1[ p + 1 ] );
}
return;
}
cout << " Value of I is: " << i << " and value of K is: " << k << endl;
if( result[ i + 1 ] != '\0' )
{
swap( &result[ i ], &result[ i + 1 ] );
k = 0;
d[ 0 ] = '\0';
cout << "New Branch: Value = " << result << " and stack = " << temp << endl;
}
i = i + 1;
}
}
int main( int argc, char *argv[] )
{
char c[100], temp[100];
cin >> c;
// cout << c << endl;
memcpy( temp, c, sizeof(c) );
// cout << temp << endl;
char c1[2];
c1[0] = c[0];
c1[1] = '\0';
Permute( c1, &temp[1], strlen( c ) );
}
谢谢!
最佳答案
如果这不是为了个人教育,你真的应该使用预定义函数 next_permutation
.它非常易于使用:
#include <algorithm>
#include <iostream>
#include <string>
using std::string;
using std::cout;
using std::sort;
int main() {
string s("run1");
sort(s.begin(), s.end());
do {
cout << s << "\n";
} while (next_permutation(s.begin(), s.end()));
return 0;
}
如果你真的需要用 run1
开始排列,您仍然可以生成 vector<int>
的排列包含 {0, 1, 2, 3}
然后通过以下代码构建中间字符串:
#include <algorithm>
#include <cstddef>
#include <iostream>
#include <string>
#include <vector>
using std::cout;
using std::string;
using std::vector;
int main() {
string s("run1");
vector<int> indexes;
for (size_t i = 0; i < s.size(); i++)
indexes.push_back(i);
do {
string tmp("");
for (size_t i = 0; i < indexes.size(); i++)
tmp += s[indexes[i]];
cout << tmp << "\n";
} while (next_permutation(indexes.begin(), indexes.end()));
return 0;
}
关于c++ - Knuth 置换算法奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3099708/
我正在尝试获取 vector 的每个排列,但也有一个指示子排列的分隔符。从我的结果中可以看出,我的代码似乎有一个错误,即结束排列。 0 1 3 2 | 和 0 2 3 1 | 和 0 3 2 1 |
假设我有整数数组列表...有没有一种方法可以生成数组列表中元素的随机排列/排列 所以如果列表是 {1,2,3,4,5,6} 调用一些方法 randomPermute() 会把它变成随机的东西,比如 {
为什么此代码注释有效(代码编译并运行良好,但实际上并未显示排列): int main(int argc, char *argv[]) { long number; vector int
我正在开发一个模块化 Maven 项目。我的项目的框架如下: |-- parent |-- model --pom.xml |-- services -
随机(但重复)置换 Java 字节数组中所有位的最快方法是什么?我试过用 BitSet 成功地做到了,但是有更快的方法吗?显然,for 循环消耗了大部分 CPU 时间。 我刚刚在我的 IDE 中做了一
假设我有一个 int T 数组,我正在寻找一种置换 i 和 T[i] 的就地算法 我有:[3 2 0 1] (a) 我想要:[2 3 1 0] (b) 例如。在 (b) 中 T[0] = 2 因为在
我有以下问题: 在 __m128i寄存器有 16 个 8 位值,按以下顺序排列: [ 1, 5, 9, 13 ] [ 2, 6, 10, 14] [3, 7, 11, 15] [4, 8, 12,
是否可以使用 Cg 修改片段(像素)着色器中的像素坐标?我确信此类功能在第二代/第三代着色器中可用,但我不知 Prop 体的配置文件是什么,也不知道如何使用。 最佳答案 不,这是不可能的。 您可以在片
是否可以使用 Cg 修改片段(像素)着色器中的像素坐标?我确信此类功能在第二代/第三代着色器中可用,但我不知 Prop 体的配置文件是什么,也不知道如何使用。 最佳答案 不,这是不可能的。 您可以在片
我有一个 arma::cube mycube(5,10,15); 我想排列它的尺寸,就像在 matlab 中做的那样: mycube = ones(5,10,15); mycube = permute
假设 100 人围成一圈。从第 1 人数到第 14 人,将此人移出圈子。按照数数顺序,再次数数,去掉第 14 个人。重复。最后站着的是谁? 我已经尝试了一切来解决这个问题,但它似乎无法处理死循环。
我对使用 C 代码置换 d 维张量的元素很感兴趣(因此,只使用循环),我想用 d 作为参数编写函数。张量数据目前包含在“d 维”指针中(例如,当 d = 1 时的简单数组)。到目前为止,我已经用 **
我正在尝试为网站上的图像创建 rgb 偏移效果。我有基本的功能,但问题是 channel 被纹理的 uv 偏移了。因此,如果图像大小不同,则每个图像的偏移量在视觉上并不相同。 这是我的片段着色器。 u
我正在开发一个由 SQLite 数据库支持的 C++ 程序。该数据库包含文档表、文档元素和文档边界(即位于文档边界上的文档元素集)。文档是在运行时创建的。 该程序支持合并文档的基本操作,它使用源文档中
假设您有一个 std::vector某种类型的T和一系列指数 std::vector这个 vector 。现在我正在寻找一个函数 permute(const std::vector& vector,
我正在尝试用 替换我的表结构标签。但是前导订单号和内容之间总是存在位移/偏移。 A Name An Icon 我不知道要更改什么。当我使用
这个问题与这个question有关可能到this other 假设您有两个矩阵 A 和 B。A 是 M×N,B 是 N×K。我想获得一个 M×K 矩阵 C 使得 C(i, j) = 1 - prod(
我是一名优秀的程序员,十分优秀!