那是我要解决的问题。 (鉴于长度为2n的字符串,我必须以各种可能的方式将其分成两部分,而不必重复组。)
我使用的方法是:
(我意识到可能会有更好的方法)
stage('Run Tests') {
// Shell build step
sh """
#!/bin/bash
echo "Executing Fastlane test lane..."
$HOME/.fastlane/bin/fastlane tests || exit 1;
"""
}
运行时,仅给出1行作为输出。我认为错误在于#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char *b[100000000];
int bSize = 0;
void print(char *a)
{
int k = strlen(a);
printf("M: ");
for(int i=0 ; i<k/2 ; i++)
{
printf("%c ", a[i]);
}
printf("| B: ");
for(int i=0 ; i<k/2 ; i++)
{
printf("%c ", a[k/2 + i]);
}
printf("\n");
}
void check(char *a)
{
int k = strlen(a);
for(int i=0 ; i<bSize ; i++)
{
int c = 0;
for(int j=0 ; j<k/2 ; j++)
{
for(int m=0 ; m<k/2 ; m++)
{
if(a[m] == b[i][j])
{
c++;
break;
}
}
}
for(int j=0 ; j<k/2 ; j++)
{
for(int m=0 ; m<k/2 ; m++)
{
if(a[m + k/2] == b[i][j + k/2])
{
c++;
break;
}
}
}
if(c == k)
{
break;
}
else
{
b[bSize] = a;
bSize++;
print(a);
}
}
}
void swap(char *a, char *b)
{
char temp = *a;
*a = *b;
*b = temp;
}
void permute(char *a, int start, int end)
{
if(start == end)
if(bSize == 0)
{
print(a);
b[bSize] = a;
bSize++;
}
else
check(a);
else
{
for(int i=start ; i<=end ; i++)
{
swap((a+start), (a+i));
permute(a, start+1, end);
swap((a+start), (a+i));
}
}
}
int main()
{
int n;
scanf("%d", &n);
char f;
scanf("%c", &f);
char A[n];
for(int i=0 ; i<n-2 ; i++)
{
char c;
scanf("%c", &c);
if(c == ' ' || c == 'M' || c == 'B')
i--;
else
A[i] = c;
}
A[n-2] = '\0';
permute(A, 0, n-3);
return 0;
}
。在b[]
函数中,check
和b[0]
总是相等的。 a
永远不会超出1。我不明白为什么。
答案 0 :(得分:0)
b[bSize] = a;
将a
的值存储在b[bSize]
中。 a
是指向A
中定义的数组main
的第一个元素的指针。因此,您不必存储单个字符串,而只是存储指向A
的指针,并且该指针永远不会改变。
要使用此算法,必须复制每个字符串。这需要更改b
的定义方式以及如何比较字符串。 (您不能将字符串与==
进行比较。)
(但是,此任务有一种更好的算法,不需要生成所有排列。)