首頁  >  問答  >  主體

java - C语言的一道关于循环的练习题求解


做这道题目没什么思路?不知道该怎么下手,求大神讲解一下

ringa_leeringa_lee2742 天前559

全部回覆(6)我來回復

  • 大家讲道理

    大家讲道理2017-04-18 10:58:30

    http://blog.csdn.net/houyp520...

    回覆
    0
  • 阿神

    阿神2017-04-18 10:58:30

    最簡單的話就是窮舉9個數字的排列。

    優化一點就是先排除一些不可能的情況。例如中間的數是2的倍數,最後的數是3的倍數。諸如此類。

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-18 10:58:30

    寫個遞歸好了。 。或者叫迭代?

    回覆
    0
  • 高洛峰

    高洛峰2017-04-18 10:58:30

    公開課西德尼{

    雷雷

    }

    回覆
    0
  • 迷茫

    迷茫2017-04-18 10:58:30

    劉汝佳的題啊。

    枚舉第一個數, 也就是1:2:3中佔1的那個數。

    枚舉範圍是123~345。根據這個數,去計算其他兩個數,然後判定是否剛好用了9個數字即可。

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-18 10:58:30

    思路很簡單,既然要讓比例為1:2:3且每個數要用一次,那就直接將1,2,3各放大x倍,然後判斷是否滿足每個數僅出現一次即可。 1只少放大100倍才能達到3位數,所以直接從123開始即可。代碼如下。
    int testa()
    {

    int a=1,b=2,c =3;
    char szA[10]={0},szB[4]={0},szC[4]={0},cTag[10]={0};
    
    for(int i=123;i<=333;i++)
    {
        memset(szA,0x00,10);memset(szB,0x00,4);memset(szC,0x00,4);memset(cTag,0x00,10);
        sprintf_s(szA,"%d",a*i);sprintf_s(szB,"%d",b*i);sprintf_s(szC,"%d",c*i);
    
        strcat_s(szA,szB);strcat_s(szA,szC);
        int j=0;
        for(j=0;j<9;j++)
        {
            if(cTag[szA[j]-'1']!=0)
                break;
            cTag[szA[j]-'1']=1;
        }
    
        if(j==9)
            printf("%s\n",szA);
    }
    
    return 0;

    }

    回覆
    0
  • 取消回覆