VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1133|回复: 8

一个算法问题

[复制链接]

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-3-22 11:30:01 | 显示全部楼层 |阅读模式
用户输入一个不重复字符串,
编写程序,打印出这个字符串的全排列情况
比如:输入“123”,则打印出“123”,“132”;“213”;“321”;“231”;“312”
要求,用递归方法编写,c语言。

这个是一个java的题目,用java很容易就编出来了,但是我刚学c不久,想把它用c编出来却老是出错,请各位帮忙 哦。
回复

使用道具 举报

0

主题

24

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-7-1 16:15:01 | 显示全部楼层
还知道啥叫排列啊?
回复

使用道具 举报

0

主题

78

帖子

29.00

积分

新手上路

Rank: 1

积分
29.00
发表于 2020-7-2 23:30:01 | 显示全部楼层
#include  <stdio.h>  
#define  n  4    /*求1-n的所有排列*/   
int  a[n],d[n],e[n];   
void  main()   
{   
               int  i,q,p,k,r,total;   
               a[1]=1;   
               for(i=2;i<=n;i++)   
               {   
                               a[i]=i;   
                               d[i]=i;   
                               e[i]=-1;   
               }   
               total=0;   
               s2:   
               q=0;   
                               for(i=1;i<=n;i++)printf("%d  ",a[i]);   
                               printf("\n");   
                               total+=1;   
                               for(k=n;k>=2;k--)   
                               {   
                                               d[k]+=e[k];   
                                               p=d[k];   
                                               if(p==k)   
                                                               e[k]=-1;   
                                               else  if(p==0)   
                                   {e[k]=1;q++;}   
                                   else  {   
                                               p+=q;   
                                                               r=a[p];   
                                                               a[p]=a[p+1];   
                                                               a[p+1]=r;   
                                                               goto  s2;   
                                               }   
                               }   
               printf("total=  %d\n",total);   
}  
回复

使用道具 举报

0

主题

78

帖子

29.00

积分

新手上路

Rank: 1

积分
29.00
发表于 2020-7-3 01:00:01 | 显示全部楼层
数据的赋值过程需要根据输入修改一下,
就是每次接收一位输入数据就是了,
或者用 char 数组,
然后按照元素访问数组元素也可以 ~~~~~~
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-7-3 15:00:01 | 显示全部楼层
#include <stdio.h>

#define MAX 10
int used[MAX];
int result[MAX];
int N;

void print(){
int i;
for(i = 0; i < N; i++)
printf("%d ", result[i]);
printf("\n");
}
void proc(int step){
int i;
if(step == N)
print();
else{
for(i = 0; i < N; i++){
if(!used[i]){
used[i] = 1;
result[step] = i + 1;
proc(step + 1);
used[i] = 0;
}
}
}
}

main(){
scanf("%d", &N);
proc(0);
}
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-7-6 10:45:01 | 显示全部楼层
各位都没有明白题目意思
zjwzjw
你的没有用到递归,用for循环的话如果字符串复杂点,比如说5个或者6个字符的:“ABCDE”这样的就显的很混乱了。


64081874
你的有用递归,思路也很清晰,而且给了我很多提示,但是你没有看清楚,我要的是字符串哦
请你帮忙改下程序,使得可以用字符串作为参数
谁按题目意思做出来了的我另开贴送50分,谢谢大家来帮忙
7号结这个帖!
回复

使用道具 举报

0

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-7-9 21:15:01 | 显示全部楼层
改一下上面的

#include <stdio.h>

#define MAX 20
int used[MAX];
int result[MAX];
int str[MAX];
int len;

void print(){
int i;
for(i = 0; i < len; i++)
printf("%d ", result[i]);
printf("\n");
}
void proc(int step){
int i;
if(step == len)
print();
else{
for(i = 0; i < len; i++){
if(!used[i]){
used[i] = 1;
result[step] = str[i];
proc(step + 1);
used[i] = 0;
}
}
}
}

main(){
gets(str);
len=strlen(str);
proc(0);
}
回复

使用道具 举报

0

主题

4

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-7-11 16:45:01 | 显示全部楼层
不重复字符串?
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-8-8 02:00:01 | 显示全部楼层
cy2015abc()
同志的程序调试时候出了问题
没有人解决我的问题         晕啊
有没有人真正能解决问题的啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表