社区
C语言
帖子详情
怎样把3个数摆到3个位置,不同次序,显示出所有的排法?
chujidiy
2003-08-29 07:11:21
刚开始,我先这个问题很容易。想想用手在纸上划,一下子就能得到一共有多少种排法。
真的用C写起来,就好麻烦了!有什么好的算法吗?
...全文
134
13
打赏
收藏
怎样把3个数摆到3个位置,不同次序,显示出所有的排法?
刚开始,我先这个问题很容易。想想用手在纸上划,一下子就能得到一共有多少种排法。 真的用C写起来,就好麻烦了!有什么好的算法吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
chujidiy
2003-09-02
打赏
举报
回复
多谢各位的指教,还有 ZhangYv(闭关修炼~功力暴增中) 给我的网址.我这就揭贴!
ruanzheng13
2003-08-30
打赏
举报
回复
给定了3个数,还是很简单的
3层循环就行了
n个数就用递归
yym314
2003-08-30
打赏
举报
回复
C++标准库中有通用和高效的算法,下面是一个简单的例子:
#include <algorithm>
#include <iostream>
using namespace std;
template <typename BidirectionalIterator,typename T>
void permutation(BidirectionalIterator first, BidirectionalIterator last,T s)
{
sort(first,last);
do{
for(BidirectionalIterator i(first);i!=last;++i)
{
cout << *i; cout << s;
}
cout << endl;
}while (next_permutation(first, last));
}
int main()
{
int A[] = {1,20,3,5};
const int N = sizeof(A) / sizeof(int);
permutation(A, A+N ,",");
}
bahanzo1
2003-08-30
打赏
举报
回复
我觉得可以用递归来做这个问题吧:
首先将三个数任意抽取一个出来放在第一个,剩下的就是余下两个的全排列的问题了,这是很好解决的
n个也同样可以用
kotton8848
2003-08-30
打赏
举报
回复
我觉得时间复杂度很高
简单的还行
但是我们在实际编程的时候不行
caoyun
2003-08-29
打赏
举报
回复
http://expert.csdn.net/Expert/topic/1449/1449551.xml?temp=.4954492
这是我给人骂的一篇帖子,去看吧,全排列的`~
ZhangYv
2003-08-29
打赏
举报
回复
http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=2987
江川GG
2003-08-29
打赏
举报
回复
在很多的算法引论的书里面都应该有这种排列问题的算法,
chengroad
2003-08-29
打赏
举报
回复
我曾写过一全排列算法的程序,我的算法如下,可以参考。
设n个数,
1。取第一个数,加入排列中(可以用vector、list存储该排列),此时共1排列,其中只1个元素
2。取第二个数,插入第一元素前得一排列,插入第一元素后得另一排列。此时共2排列,其中只2个元素
i。取第i个元素,并依次取上一次所得各排列(每一次排列元素中即为前i-1个数,共有1*2*3*(i-1)个排列),将i元素依次插入该排列中第一、二...元素前得第一、二...排列.并在该排列最后插入i元素,得最后一排列
。。。。。。循环下去即可得n个元素得排列。
简单说,思想就是每次取一个数分别插入原各排列中第一元素前、第二元素前...,最后一元素前,最后一元素后,每次插入都产生一新的排列。
3个来说是很简单的,很快就可以出来。我当时求到6、7还挺快,8、9...就越来越慢了。可以据实际问题作些优化。
算法没有证明过,但应该没有问题。
fangrk
2003-08-29
打赏
举报
回复
如果使用C++,使用next_permutation
leasun
2003-08-29
打赏
举报
回复
这种问题用递归解决比较简单
Dragon132
2003-08-29
打赏
举报
回复
这个简单一点
#include <stdio.h>
main()
{
int i,j;
for(i=1;i<4;i++)
for(j=1;j<4;j++)
{
if(i==j)
continue;
printf("%4d%4d%4d\n",i,j,6-i-j);
}
}
Dragon132
2003-08-29
打赏
举报
回复
穷举吧!
#include <stdio.h>
main()
{
int i,j,k;
for(i=1;i<4;i++)
for(j=1;j<4;j++)
{
if(i==j)
continue;
for(k=1;k<4;k++)
if(k==i||k==j)
continue;
else
printf("%4d%4d%4d\n",i,j,k);
}
}
C++入门必做题(经典的算法题)
C++入门必做题(经典的算法题)1. 给定等式 A B C D E 其中每个字母代表一
个数
字,且
不同
数字对应不 D F G 同字母。编程求
出
这些数字并且打
出
这
个数
字的 + D F G 算术计算竖式。 ─────── X Y Z D E 2. A
网络收集的逻辑思维题
一个有意思的逻辑训练题目 题目如下: 有两个大于1小于100的自然数x,y,老师告诉小明两
个数
的和,告诉小强两
个数
的积。已知小明和小强足够聪明。 下面是两个人的对话: 小强:我不知道这两
个数
是多少。(<沉默中>...) 小明:我知道你不知道。(我不知道这两
个数
是多少,而且你也不知道。) 小强:那我知道了。(你说的对,不过我现在知道了。) 小明:那我也知道啦。(额...那我也知道啦。) 问这两
个数
是多少? PS.
数据结构速成
15、以某结点为根结点的所有结点都是这个结点的子孙结点,直接分叉
出
这个结点的结点是它的祖先结点,直接分叉
出
它的祖先节点的结点也是它的祖先节点,包括根结点,但是只有直接分叉
出
这个结点的结点是它的父结点,只有这个结点直接分叉
出
的结点是它的子结点,只有和它拥有同一个父结点的结点是它的兄弟结点,有序树是树中结点的各子树从左到右含义
不同
的树,无序树无
次序
。f、得到后缀表达式后,再从左到右扫描,数字和字母直接入栈,如果遇到运算符弹
出
栈顶两个元素,先进的 +-*/ 后进的,算完将结果入栈,算到最后不入栈,
显示
结果。
Python3-76道脚本实例巩固python基础
Python3-76道脚本实例巩固python python解释器版本:python 3.9 实例1:输
出
"Hello World!" print("Hello world!") 实例2:通过用户输入两
个数
字,并计算两
个数
字之和。 a = float(input("输入第1
个数
字:")) b = float(input("输入第2
个数
字:")) print("和为:", a+b) 实例3:通过用户输入一
个数
字,并计算这
个数
字的平方根。 import math a = float(input("输入1
个数
Java_第05章_数组
需要统计某公司50个员工的工资情况,例如计算平均工资、找到最高工资等。用之前知识,首先需要声明50个变量来分别记录每位员工的工资,这样会很麻烦。因此我们可以将所有的数据全部存储到一个容器中统一管理,并使用容器进行计算。水杯(装水等液体),衣柜(装衣服等物品),集装箱(装货物等)。将多
个数
据存储到一起,每
个数
据称为该容器的元素。Java 语言里提供了支持多维数组的语法。如果说可以把一维数组当成几何中的线性图形,那么二维数组就相当于是一个表格,像Excel中的表格、围棋棋盘一样。
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章