用回溯法找出 n 个自然数中取 r 个数的全排列
2009-05-07 09:47
176 查看
using System;
using System.Collections.Generic;
using System.Text;
namespace ExArrange
{
class Arrange
{
public void Arrange(int n, int r)
{
int i = 0, j;
string s;
int[] a = new int
;
a[i] = 1;
while (true)
{
if ((a[i] - i) <= (n - r + 1))
{
if (i == (r - 1))
{
s = "";
for (j = 0; j < r; j++)
{
s = s + Convert.ToString(a[j]) + ",";
}
// Memo1.Lines.Append(Trim(s));
Console.WriteLine(s);
a[i] = a[i] + 1;
continue;
}
i = i + 1;
a[i] = a[i - 1] + 1;
}
else
{
if (i == 0)
{
break;
}
i = i - 1;
a[i] = a[i] + 1;
}
}
}
static void Main(string[] args)
{
Ex03_19 e = new Ex03_19();
e.Arrange(6, 3);
}
}
}
using System.Collections.Generic;
using System.Text;
namespace ExArrange
{
class Arrange
{
public void Arrange(int n, int r)
{
int i = 0, j;
string s;
int[] a = new int
;
a[i] = 1;
while (true)
{
if ((a[i] - i) <= (n - r + 1))
{
if (i == (r - 1))
{
s = "";
for (j = 0; j < r; j++)
{
s = s + Convert.ToString(a[j]) + ",";
}
// Memo1.Lines.Append(Trim(s));
Console.WriteLine(s);
a[i] = a[i] + 1;
continue;
}
i = i + 1;
a[i] = a[i - 1] + 1;
}
else
{
if (i == 0)
{
break;
}
i = i - 1;
a[i] = a[i] + 1;
}
}
}
static void Main(string[] args)
{
Ex03_19 e = new Ex03_19();
e.Arrange(6, 3);
}
}
}
相关文章推荐
- 常用算法(C#): 用回溯法找出 n 个自然数中取 r 个数的全排列
- 用回溯法找出n个自然数中取r个数的全排列
- 题目1:找出1000以下自然数中3和5的倍数之和。
- 【N个自然数的全排列问题】
- 找出n个自然数中(1,2,3,……,n)中取r个数的组合。eg:n=5,r=3 时组合数为10
- 1.1至100一百个自然数(无序),放入一个99个元素的数组a[99],用java语言编写一段程序,找出没有被放入数组这个数。【转】
- 回溯法求解全排列问题
- Stack(篇1)计算全排列大于等于其的自然数
- 欧拉工程第一题 找出1000以下的自然数中,属于3和5的倍数的数字之和。
- 1-100自然数&nbsp;找出缺少的数(…
- 回溯法 全排列
- 回溯法(Backtracking)总结(子集,全排列,组合和,回文分割)
- 自然数序列,找出任意连续之和等于n的所有子序列
- 找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合
- 一个1~n的自然数的乱序数组,其中缺失了1到n之间的某个数,如何快速找出这个数?
- 回溯法实现全排列
- 找出不在预定数组中的自然数
- 找出不在预定数组中的自然数
- 1、在一个由自然数1-1000中某些数字所组成的数组中,每个数字可能出现零次或者多次。设计一个算法,找出出现次数最多的数字。
- 在1--100的自然数中有99个在一个数组中,怎样找出不在数组中的数