大神们,如何在确认了一个字符串比如“abcde”,如何用代码实现输出“a;b;c;d;e;ab;ac;ad;ae.......”
从一个到5个字符所有的排列组合,而且每一个组合里面还不能有重复的字符,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string metachars = "abcde";
for (int i = 1; i <= metachars.Length; i++)
{
foreach (string s in foo(metachars, i))
{
Console.WriteLine(s);
}
}
}
static IEnumerable<string> foo(string metachars, int i)
{
var query = metachars.Select(x => x.ToString().AsEnumerable());
while (query.First().Count() < i)
query = query.SelectMany(x => metachars.Where(y => y > x.Last()).Select(y => x.Concat(y.ToString().AsEnumerable())));
return query.Select(x => string.Join(",", x));
}
}
}
这道题面腾讯的时候,被问过,就是典型的递归操作,你自己手动模拟下递归过程,很容易写出来的
给定一串字符串,反向输出!
//本程序利用字符串处理里的charAt()方法,注意输入的时候不仅仅是字符,还可以时数字或@#¥%……&*();
import javax.swing.JOptionPane;
public class StringCharAT {
public static void main(String args[]) {
String str = JOp......
答案就在这里:字符串的反串输出问题
----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。
a
b
c
d
e
a,b
a,c
a,d
a,e
b,c
b,d
b,e
c,d
c,e
d,e
a,b,c
a,b,d
a,b,e
a,c,d
a,c,e
a,d,e
b,c,d
b,c,e
b,d,e
c,d,e
a,b,c,d
a,b,c,e
a,b,d,e
a,c,d,e
b,c,d,e
a,b,c,d,e
在线运行验证通过
#include
#include
#include
#include
using namespace std;
void deal_str(char *, char *);
void deal_str(char *str,char *pBegin)
{
if (*pBegin == '\0')
{
cout <<str<< " ";
}
else
{
for (char *pch = pBegin; *pch != '\0'; pch++)
{
char temp=*pch;
*pch = *pBegin;
*pBegin = temp;
deal_str(str, pBegin + 1);
temp = *pch;
*pch = *pBegin;
*pBegin = temp;
}
}
}
int main(int argc, char **argv)
{
char str[] = "abcde";
char *pBegin = str;
deal_str(str, pBegin);
system("pause");
return 0;
}
#include<iostream>
#include<stdlib.h>
#include<string>
#include<stdio.h>
using namespace std;
void deal_str(char *, char *);
void deal_str(char *str,char *pBegin)
{
if (*pBegin == '\0')
{
cout <<str<< " ";
}
else
{
for (char *pch = pBegin; *pch != '\0'; pch++)
{
char temp=*pch;
*pch = *pBegin;
*pBegin = temp;
deal_str(str, pBegin + 1);
temp = *pch;
*pch = *pBegin;
*pBegin = temp;
}
}
}
int main(int argc, char **argv)
{
char str[] = "abcde";
char *pBegin = str;
deal_str(str, pBegin);
system("pause");
return 0;
}
#include<iostream>
#include<stdlib.h>
#include<string>
#include<stdio.h>
using namespace std;
void OutPut(char *dest);
void GetPowerSet(int i, char A[], char B[]);
void deal_str(char *, char *);
void deal_str(char *str,char *pBegin)
{
if (*pBegin == '\0')
{
cout <<str<< " ";
}
else
{
for (char *pch = pBegin; *pch != '\0'; pch++)
{
char temp=*pch;
*pch = *pBegin;
*pBegin = temp;
deal_str(str, pBegin + 1);
temp = *pch;
*pch = *pBegin;
*pBegin = temp;
}
}
}
int main(int argc, char **argv)
{
char A[] = "abcd";
int size_B = strlen(A) + 1;
char* B = new char[size_B];
memset(B, 0, size_B);
GetPowerSet(0, A, B);
system("pause");
delete B;
return 0;
}
void OutPut(char *dest)
{
// for (; *dest; dest++) cout << *dest << " ";
char *pBegin = dest;
deal_str(dest, pBegin);
cout << endl;
}
void GetPowerSet(int i, char A[], char B[])
{
if (i == strlen(A)) OutPut(B);
else
{
char x = A[i];
int k = strlen(B);
B[k] = x; GetPowerSet(i + 1, A, B);
B[k] =0; GetPowerSet(i + 1, A, B);
}
}