洛谷 P1008 三連擊 將1,2, \cdots ,91,2,⋯,9共99個數分成33組,分別組成33個三位數,且使這33個三位數構成1:2:31:2:3的比例,試求出所有滿足條件的33個三位數。 輸入輸出格式 輸入格式: 木有輸入 輸出格式: 若干行,每行33個數字。按照每行第11個數字升序排列。


#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a[10], b[10], c[10], n1[999], n2[999], n3[999], s[10], i, j, k, f, t, r;   //創建三個數組,用來存放1-9
    t = 1;
    for (i=1; i<=10; i++)      //為三個數組賦值1-9
    {
        a[i] = i;
        b[i] = i;
        c[i] = i;
    }

//### 列出符合“在1-9選三個數組成各位都不同”的第一個三位數 ###

    for (i=1; i<4; i++)    //第一層循環控制第一位數(百位),並且剔除掉超過400的數
    {
        for (j=1; j<10; j++)    //二層循環控制第二位(十位)
        {
            if (j!=i)   //保證第二位中不含第一位的數字(剔除十位中的百位數字)
            {
                for (k=1; k<10; k++)    //三層循環控制第一位(個位)
                {
                    if (k!=i && k!=j)   //保證不含第一、二位中的數(剔除個位中百、十位中數字)
                    {
                        n1[t] = a[i]*100 + b[j]*10 +c[k];  //將三位不同數字組合成第一個三位數
                        n2[t] = n1[t] * 2;      //第二個三位數
                        n3[t] = n1[t] * 3;      //第三個三位數
                        t++;        //確定符合條件的第一個三位數的個數,用於下面控制循環
                    }
                }
            }
        }
    }

    //### 循環判斷三個三位數所含數字在1-9中且各不相同 ##
    for (f=1; f<t; f++)     //一層循環,循環遍歷上面求出的在數組n*[]中的元素
    {
        if (n1[f]>191 && n1[f]<334)     //確定所求第一位三位數在191-334之間,其余不符合條件
        {                               //把三個三位數中全部9個數存放在數組s[]中
            s[0] = n1[f] / 100;
            s[1] = (n1[f] % 100) / 10;
            s[2] = n1[f] % 10;
            s[3] = n2[f] / 100;
            s[4] = (n2[f] % 100) / 10;
            s[5] = n2[f] % 10;
            s[6] = n3[f] / 100;
            s[7] = (n3[f] % 100) / 10;
            s[8] = n3[f] % 10;
            r = 0;      //r賦值0(清零)
            for (i=0; i<8; i++)     //確保三個三位數中不含相同數字且不含數字0
            {
                for (j=i+1; j<9; j++)
                {
                    if (s[i]==s[j] || s[i]==0 || s[j]==0)   //如果有相同數字或有數字0則令r=1並跳轉
                        {
                            r = 1;
                            goto A;
                        }
                }
            }

            A:
            if (r == 0)     //如果各位數字均不同並且不含有數字0,則輸出
            {
                printf("%d %d %d\n", n1[f], n2[f], n3[f]);
            }
        }
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM