none
c# 求1到N能被7整除的数,5个一组,做成不规则数组 实在是写不出来,求帮助。 RRS feed

  • 问题

  • c# 求1到N能被7整除的数,5个一组,做成不规则数组    实在是写不出来,求帮助。
    我只学了 各种循环和 条件判断,所以请最好不要用我没学过的函数。谢谢啦。

         用的是Unity 中的vs写的代码

        void Start()
        {
            //求1-1000能被7整除的数,五位为一组,做成交错数组
            int x = 121;
            int cont = 0;//声明交错数组的维数
            int mo = 0;
    
            for (int i = 1; i <= x; i++)
            {
                if (i % 7 == 0)
                {
                    //Debug.Log(i);
                    cont++;// 求有多少能被7整除的数
                }
            }
    
            //求交错数组的维数
            if (cont % 5 == 0)
            {
                cont = cont / 5;// 得到维数
            }
            else
            {
                mo = cont % 5;// 交错数组最后一个数组可能不是5个数,设置个变量mo,作为最后一个数组的下标
                cont = cont / 5 + 1;// 得到维数
    
            }
            Debug.Log(cont);//得到交错数组维数
            Debug.Log(mo);
            int[][] arr7 = new int[cont][];//第一维
            if (mo != 0)
            {
                arr7[cont - 1] = new int[mo];//最后一维
            }
    
            int j = 0;//维数 计数器
            int a = 0;//每一个元素的下标
            int b = 0;//最后一维元素的下标
            arr7[j] = new int[5];
            //arr7[j] = new int[5];
            for (int i = 1; i <= x; i++)
            {
                if (i % 7 == 0)
                {
                    if (j < cont - 1)
                    {
                        //Debug.Log("J=" + j);
                        if (a <= 4)
                        {
                            arr7[j][a] = i;
                            a++;
                            //Debug.Log("A :"+a);
                        }
                        else
                        {
                            j++;
                            a = 0;
                            if (j == cont - 1)
                            {
                                arr7[j] = new int[mo];
                                Debug.Log("增长的J:" + j);
                            }
                            else
                            {
                                arr7[j] = new int[5];
                            }
    
                            arr7[j][a] = i;
    
                            //Debug.Log("增长的J:" + j + "        增长的a:" + a + "       数组:" + arr7[j][a]);
                            a++;
                        }
    
                    }
    
                }
            }
    
            //Debug.Log(arr7[2][3]);
            //Debug.Log(arr7[2][4]);
            //Debug.Log(arr7[2][5]);
            Debug.Log(arr7[cont - 1].Length);
            foreach (int[] ints in arr7)
            {
                foreach (int i in ints)
                {
                    Debug.Log(i);
                }
            }
        }


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。

    2017年5月14日 9:17

答案

  • static void Main(string[] args)
            {
                int numCount = 1000;
                int arrayLen = 0;
                int arrayIndex = 0;
                int[] numList = null;
    
                //取得 1000 正整數中 被 7 整除的數。
    
                bool isFirstNumberMod7 = true;
                for (int i = numCount; i >= 1; i--)
                {
                    if (i % 7 != 0)
                    {
                        continue;
                    }
    
                    if (isFirstNumberMod7)
                    {
                        //從第一個最大的被七整除的數,可以知道我們要多大的陣列
                        isFirstNumberMod7 = false;
                        arrayLen = i / 7;
                        numList = new int[arrayLen];
                        arrayIndex = arrayLen - 1;
                    }
                    numList[arrayIndex] = i;
                    arrayIndex--;
                }
    
                //五個一組。
    
                //取得有多少組
                int groupItemCount = 5;
                int groupCount = arrayLen / groupItemCount + ((arrayLen % groupItemCount == 0) ? 0 : 1);
    
                int[,] group = new int[groupCount, groupItemCount];
                Random r = new Random();
                //int[] randomNumList = new int[arrayLen];
    
                //for (int i = 0; i < numList.Length; i++)
                //{
                //    randomNumList[i] = numList[i];
                //}
    
                for (int i = 0; i < groupCount; i++)
                {
                    for (int j = 0; j < groupItemCount; j++)
                    {
                        int index = i * groupItemCount + j;
                        int rNum = 0;
    
                        if (index > arrayLen - 1)
                        {
                            break;
                        }
    
                        group[i, j] = numList[index];
    
                        //int[] tempNumList = null;
                        //while (true)
                        //{
                        //    rNum = r.Next(0, randomNumList.Length - 1);
                        //    if (randomNumList[rNum] != 0)
                        //    {
                        //        group[i, j] = randomNumList[rNum];
                        //        randomNumList[rNum] = 0;
                        //        tempNumList = new int[randomNumList.Length - 1];
    
                        //        int l = 0;
                        //        for (int k = 0; k < randomNumList.Length; k++)
                        //        {
                        //            if (randomNumList[k] != 0)
                        //            {
                        //                tempNumList[l] = randomNumList[k];
                        //                l++;
                        //            }
                        //        }
    
                        //        randomNumList = new int[tempNumList.Length];
    
                        //        for (int m = 0; m < tempNumList.Length; m++)
                        //        {
                        //            randomNumList[m] = tempNumList[m];
                        //        }
                        //        break;
                        //    }
                        //}
                    }
                }
    
                //印出
                for (int i = 0; i < groupCount; i++)
                {
                    string result = "";
                    for (int j = 0; j < groupItemCount; j++)
                    {
                        result += group[i, j] + ((j == groupItemCount - 1) ? "" : ",");
                    }
                    Console.WriteLine(result + "\n");
                }
            }


    2017年5月14日 15:10

全部回复

  • static void Main(string[] args)
            {
                int numCount = 1000;
                int arrayLen = 0;
                int arrayIndex = 0;
                int[] numList = null;
    
                //取得 1000 正整數中 被 7 整除的數。
    
                bool isFirstNumberMod7 = true;
                for (int i = numCount; i >= 1; i--)
                {
                    if (i % 7 != 0)
                    {
                        continue;
                    }
    
                    if (isFirstNumberMod7)
                    {
                        //從第一個最大的被七整除的數,可以知道我們要多大的陣列
                        isFirstNumberMod7 = false;
                        arrayLen = i / 7;
                        numList = new int[arrayLen];
                        arrayIndex = arrayLen - 1;
                    }
                    numList[arrayIndex] = i;
                    arrayIndex--;
                }
    
                //打亂排列,然後五個一組。
    
                //取得有多少組
                int groupItemCount = 5;
                int groupCount = arrayLen / groupItemCount + ((arrayLen % groupItemCount == 0) ? 0 : 1);
    
                int[,] group = new int[groupCount, groupItemCount];
                Random r = new Random();
                int[] randomNumList = new int[arrayLen];
    
                for (int i = 0; i < numList.Length; i++)
                {
                    randomNumList[i] = numList[i];
                }
    
                for (int i = 0; i < groupCount; i++)
                {
                    for (int j = 0; j < groupItemCount; j++)
                    {
                        int index = i * groupItemCount + j;
                        int rNum = 0;
    
                        if (index > arrayLen - 1)
                        {
                            break;
                        }
    
                        int[] tempNumList = null;
                        while (true)
                        {
                            rNum = r.Next(0, randomNumList.Length - 1);
                            if (randomNumList[rNum] != 0)
                            {
                                group[i, j] = randomNumList[rNum];
                                randomNumList[rNum] = 0;
                                tempNumList = new int[randomNumList.Length - 1];
    
                                int l = 0;
                                for (int k = 0; k < randomNumList.Length; k++)
                                {
                                    if (randomNumList[k] != 0)
                                    {
                                        tempNumList[l] = randomNumList[k];
                                        l++;
                                    }
                                }
    
                                randomNumList = new int[tempNumList.Length];
    
                                for (int m = 0; m < tempNumList.Length; m++)
                                {
                                    randomNumList[m] = tempNumList[m];
                                }
                                break;
                            }
                        }
                    }
                }
    
                //印出
                for (int i = 0; i < groupCount; i++)
                {
                    string result = "";
                    for (int j = 0; j < groupItemCount; j++)
                    {
                        result += group[i, j] + ((j == groupItemCount - 1) ? "" : ",");
                    }
                    Console.WriteLine(result + "\n");
                }
            }

    不規則數組是指亂數嗎?!

    2017年5月14日 14:55
  • static void Main(string[] args)
            {
                int numCount = 1000;
                int arrayLen = 0;
                int arrayIndex = 0;
                int[] numList = null;
    
                //取得 1000 正整數中 被 7 整除的數。
    
                bool isFirstNumberMod7 = true;
                for (int i = numCount; i >= 1; i--)
                {
                    if (i % 7 != 0)
                    {
                        continue;
                    }
    
                    if (isFirstNumberMod7)
                    {
                        //從第一個最大的被七整除的數,可以知道我們要多大的陣列
                        isFirstNumberMod7 = false;
                        arrayLen = i / 7;
                        numList = new int[arrayLen];
                        arrayIndex = arrayLen - 1;
                    }
                    numList[arrayIndex] = i;
                    arrayIndex--;
                }
    
                //五個一組。
    
                //取得有多少組
                int groupItemCount = 5;
                int groupCount = arrayLen / groupItemCount + ((arrayLen % groupItemCount == 0) ? 0 : 1);
    
                int[,] group = new int[groupCount, groupItemCount];
                Random r = new Random();
                //int[] randomNumList = new int[arrayLen];
    
                //for (int i = 0; i < numList.Length; i++)
                //{
                //    randomNumList[i] = numList[i];
                //}
    
                for (int i = 0; i < groupCount; i++)
                {
                    for (int j = 0; j < groupItemCount; j++)
                    {
                        int index = i * groupItemCount + j;
                        int rNum = 0;
    
                        if (index > arrayLen - 1)
                        {
                            break;
                        }
    
                        group[i, j] = numList[index];
    
                        //int[] tempNumList = null;
                        //while (true)
                        //{
                        //    rNum = r.Next(0, randomNumList.Length - 1);
                        //    if (randomNumList[rNum] != 0)
                        //    {
                        //        group[i, j] = randomNumList[rNum];
                        //        randomNumList[rNum] = 0;
                        //        tempNumList = new int[randomNumList.Length - 1];
    
                        //        int l = 0;
                        //        for (int k = 0; k < randomNumList.Length; k++)
                        //        {
                        //            if (randomNumList[k] != 0)
                        //            {
                        //                tempNumList[l] = randomNumList[k];
                        //                l++;
                        //            }
                        //        }
    
                        //        randomNumList = new int[tempNumList.Length];
    
                        //        for (int m = 0; m < tempNumList.Length; m++)
                        //        {
                        //            randomNumList[m] = tempNumList[m];
                        //        }
                        //        break;
                        //    }
                        //}
                    }
                }
    
                //印出
                for (int i = 0; i < groupCount; i++)
                {
                    string result = "";
                    for (int j = 0; j < groupItemCount; j++)
                    {
                        result += group[i, j] + ((j == groupItemCount - 1) ? "" : ",");
                    }
                    Console.WriteLine(result + "\n");
                }
            }


    2017年5月14日 15:10
  •     多谢啦,明天我仔细研究下,我是菜鸟,很多逻辑转不过弯,得慢慢消化你的思路。

        我自己终于做出来了一个,方法很笨,能用。

        
    //求出数组的维数和模数
            int x = 105;
            int x7 = 0;// 有多少个7
            for (int i = 1; i <= x; i++)
            {
                if (i % 7 == 0)
                {
                    x7 += 1;
                }
            }
    
            int weidu;
            weidu = x7 % 5 == 0 ? x7 / 5 : x7 / 5 + 1;
            
            int mo = x7 % 5;
            Debug.Log(weidu);//  求得维数
            Debug.Log(mo);   // 求得模数
    
            //已知维数weidu,建立不规则数组,
            int[][] arrJiaoCuo = new int[weidu][];
            //因为是5个数字为一组,因此每一维要循环5次,先进行不考虑模数的循环
            for (int i = 0; i < weidu; i++)
            {
                //每次int[i][] 随着i的变化,都要声明每一维的数组,这个痛苦
                arrJiaoCuo[i] = new int[5];
                for (int j = 0; j < 5; j++)
                {
                    //7 * i * 5 每次要乘以5,不然下一轮开始就是14,正确答案是42,易错
                    arrJiaoCuo[i][j] = 7 * i * 5 + 7 * (j + 1);
                }
            }
    
            //最后一组,可能不满5个,单独给它来一下。
            if (mo==0)
            {
                mo = 5;
            }
            arrJiaoCuo[weidu - 1] = new int[mo];
            for (int c = 0; c < mo; c++)
            {
                arrJiaoCuo[weidu - 1][c] = 7 * (weidu - 1) * 5 + 7 * (c + 1);
            }
            //检查 无误,哈哈
            foreach (int[] i in arrJiaoCuo)
            {
                foreach (int item in i)
                {
                    Debug.Log(item);
                }
            }
            //Debug.Log(arrJiaoCuo [2][3]);
        }


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。

    2017年5月14日 16:05