A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 菜鸟励志要逆袭 中级黑马   /  2013-7-2 20:55  /  1491 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 菜鸟励志要逆袭 于 2013-7-2 20:57 编辑

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
    }
}

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

3 个回复

倒序浏览

回帖奖励 +5

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();

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
用算法写的。。
总的思路就是3位数
枚举每一位上的数字
  1. class Program
  2.     {
  3.         static int num = 0;
  4.         static int[]vis=new int[5];
  5.         static int[] a = new int[33];
  6.         static void Main(string[] args)
  7.         {
  8.             find(0, 3);
  9.             Console.WriteLine("一共{0}个数",num);
  10.             for (int i = 0; i < num; i++)
  11.             {
  12.                 Console.WriteLine(a[i]);
  13.             }
  14.             Console.ReadKey();
  15.         }
  16.         static void find(int n, int left)//n用来计算当前的和,left表示剩下的位数
  17.         {
  18.             int i;
  19.             if (left == 0)
  20.             {
  21.                 a[num++] = n;
  22.                 return;
  23.             }
  24.             for (i = 1; i <= 4; i++)
  25.             {
  26.                 if (vis[i]==0)
  27.                 {
  28.                     vis[i] = 1;
  29.                     find(10 * n + i, left - 1);
  30.                     vis[i] = 0;
  31.                 }
  32.             }
  33.             return;
  34.         }
  35.     }
复制代码

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
关键在于得到得到数组的大小定义一个合适的数组,此处可定义一个足够大的数组来优化代码,参考代码如下:
        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;
        }     

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马