using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace test7
{ ///<summary>
///有1、2、3、4 四个数字,编程实现能组成多少个互不相同且无重复数字的三位数?都是多少?
///</summary>>
class Program
{
static void Main(string[] args)
{
Program P = new Program();
int n;
n = P.result(out n);
Console.WriteLine("1 2 3 4能组成的互不相同且无重复数字的三位数个数为:");
Console.WriteLine(n);
int[] resultArray = new int[n];
P.printArray(resultArray);
Console.WriteLine("满足条件的数字如下:");
for (int i = 0; i < resultArray.Length; i++)
{
Console.Write(resultArray+"\t");
}
Console.ReadKey();
}
#region 返回能组成题目数字的个数
int result(out int n)
{
n = 0;
int[] intArray = new int[4] { 1, 2, 3, 4 };
//进行三次循环,来确定满足题目要求的数字个数
for (int i = 0; i < intArray.Length; i++)
{
for (int j = 0; j < intArray.Length; j++)
{
for (int k = 0; k < intArray.Length; k++)
{
if ((intArray != intArray[j]) && (intArray[j] != intArray[k]) && (intArray != intArray[k]))
n++;
}
}
}
return n;
}
#endregion
#region 把满足要求的数字放到一个数组中
//三次循环,来把满足要求的数字存放到一个数组中,然后返回这个数组
int[] printArray(int[] resultArray)
{
int[] intArray = new int[4] { 1, 2, 3, 4 };
int n = 0;
for (int i = 0; i < intArray.Length; i++)
{
for (int j = 0; j < intArray.Length; j++)
{
for (int k = 0; k < intArray.Length; k++)
{
if ((intArray != intArray[j]) && (intArray[j] != intArray[k]) && (intArray != intArray[k]))
{
resultArray[n] = intArray * 100 + intArray[j] * 10 + intArray[k];
n++;
}
}
}
}
return resultArray;
}
#endregion
}
} 作者: ↖落葉下♀媃媚 时间: 2013-7-2 22:01
string str = "1234";
List<int> list = new List<int>();
for (int i1 = 0; i1 < str.Length; i1++)
{
for (int i2 = 0; i2 < str.Length; i2++)
{
for (int i3 = 0; i3 < str.Length; i3++)
{
if (i1 != i2 && i2 != i3 && i1 != i3)
{
list.Add((str[i1] - '0') * 100 + (str[i2] - '0') * 10 + (str[i3] - '0'));
}
}
}
}
// 将结果打印出来
foreach (int i in list)
{
Console.WriteLine(i);
}
Console.ReadKey();作者: 曾大鹏 时间: 2013-7-2 22:06
用算法写的。。
总的思路就是3位数
枚举每一位上的数字
class Program
{
static int num = 0;
static int[]vis=new int[5];
static int[] a = new int[33];
static void Main(string[] args)
{
find(0, 3);
Console.WriteLine("一共{0}个数",num);
for (int i = 0; i < num; i++)
{
Console.WriteLine(a[i]);
}
Console.ReadKey();
}
static void find(int n, int left)//n用来计算当前的和,left表示剩下的位数
{
int i;
if (left == 0)
{
a[num++] = n;
return;
}
for (i = 1; i <= 4; i++)
{
if (vis[i]==0)
{
vis[i] = 1;
find(10 * n + i, left - 1);
vis[i] = 0;
}
}
return;
}
}
复制代码
作者: 万大述 时间: 2013-7-3 09:58
关键在于得到得到数组的大小定义一个合适的数组,此处可定义一个足够大的数组来优化代码,参考代码如下:
static void Main(string[] args)
{
int number;
result(out number); //得到互不相同的三位数的个数用来定义一个合适数组
int[] resultArray = new int[number]; //定义一个合适的数组
resultArray = result(out number); //接收返回的各个数互不相同的三位数
Console.WriteLine("1 2 3 4能组成的互不相同且无重复数字的三位数个数为:");
Console.WriteLine(number);
Console.WriteLine("满足条件的数字如下:");
for (int i = 0; i < number; i++)
{
Console.Write(resultArray[i] + "\t");
}
Console.ReadKey();
}
static int[] result(out int count)
{
count = 0;
int[] temptArray = new int[10000]; //定义一个足够大的临时数组。
int[] intArray = new int[4] { 1, 2, 3, 4 };
//进行三次循环,来确定满足题目要求的数字个数及该三位数
for (int i = 0; i < intArray.Length; i++)
{
for (int j = 0; j < intArray.Length; j++)
{
for (int k = 0; k < intArray.Length; k++)
{
if ((intArray[i] != intArray[j]) && (intArray[j] != intArray[k]) && (intArray[i] != intArray[k]))
{
temptArray[count] = intArray[i] * 100 + intArray[j] * 10 + intArray[k];
count++;
}
}
}
}
int[] resultArray = new int[count]; //定义一个合适的数组
for (int i = 0; i < count; i++) //把临时数组放到一个合适的数组中
{
resultArray[i] = temptArray[i];
}
return resultArray;
}