返回列表 發帖

[【學科】] 【數學】問題

有一個集合,集合的元素是符合下列性質:

-元素都不同,且為小於100的正整數
-任意兩數的和都不同

那麼這集合中的元素總和,最大可以是多少?


我一開始用了等差的方式來暴力解,總覺得用程式解能更快

請問一下用程式碼要怎麼解出答案?

還有,目前沒這題目的正確解答
邁向熱血教師~

void clearBoolMatrix(bool *a, int size)
{
     int i;
     for (i = 0; i < size; i++)
     {
         a[i] = false;
     }
}

int main(int argc, char *argv[])
{
    bool a[101];
    bool sum[200];
    int index_a;
    int i, j;
    bool result;
   
    index_a = 1;
    clearBoolMatrix(a, 101);
    clearBoolMatrix(sum, 200);
   
    for (i = 1; i < 100; i++)
    {
        result = true;
        for (j = 1; j < i; j++)
        {
            if (a[j])
            {
                int s = j + i;
                if (sum[s])
                {
                    result = false;
                    break;
                }
            }
        }
        
        if (result)
        {
            for (j = 1; j < i; j++)
            {
                if (a[j])
                {
                    int s = j + i;
                    sum[s] = true;
                }
            }
            a[i] = true;
            
            printf(" -- %d\n", i);
        }
    }
   
   
    system("pause");
   
    return 0;
}
功夫派~ 冰語

TOP

本帖最後由 39475494 於 2016-9-1 16:09 編輯

int index_a 沒用上,可以拿掉
如果用 struct 和 bit 去寫,配上 & | 判斷,可以更酷
-- 1
-- 2
-- 3
-- 5
-- 8
-- 13
-- 21
-- 30
-- 39
-- 53
-- 74
-- 95
請按任意鍵繼續 . . .
功夫派~ 冰語

TOP

元素總和呀
我以為是元素數量...
那可能要從最大往回找了 ?
功夫派~ 冰語

TOP

void clearBoolMatrix(bool *a, int size)
{
     int i;
     for (i = 0; i < size; i++)
     {
         a[i] = false;
     }
}

int main(int argc, char *argv[])
{
    bool a[100];
    bool sum[200];
    int i, j;
    bool result;
   
    clearBoolMatrix(a, 100);
    clearBoolMatrix(sum, 200);
   
    for (i = 99; i > 0; i--)
    {
        result = true;
        for (j = i + 1; j < 100; j++)
        {
            if (a[j])
            {
                int s = j + i;
                if (sum[s])
                {
                    result = false;
                    break;
                }
            }
        }
        
        if (result)
        {
            for (j = i + 1; j < 100; j++)
            {
                if (a[j])
                {
                    int s = j + i;
                    sum[s] = true;
                }
            }
            a[i] = true;
            
            printf(" -- %d\n", i);
        }
    }
   
   
    system("pause");
   
    return 0;
}

-------------------
-- 99
-- 98
-- 97
-- 95
-- 92
-- 87
-- 79
-- 70
-- 61
-- 47
-- 26
-- 5
請按任意鍵繼續 . . .
功夫派~ 冰語

TOP

請問一下冰語大大
這是用java寫的嗎?
怎麼構想出用boolean來寫呀?!
邁向熱血教師~

TOP

這是 C 語言呀

java 的話 bool 會寫 boolean
java 的陣列宣告是 boolean[] xxxx

其他像是 if , for 其實都通用 , c 是一種很基本的語言了

至於想到用 boolean

這功能是對應,某個數字,取或不取
當然就有兩個方式可以用,一種是像這樣 i = 1~n -> true or false
n 個數字,每個數字去設 true or false
另一種就是true -> a, b, c, d ....
true 列表,裡面可以存數字,在裡面的是 true ,不在裡面就是 false
java 的話,你也可以用 list 寫
方法很多
功夫派~ 冰語

TOP

返回列表