2020年8月10日 星期一

訓練數學感 261 ─ 圈選數值的範圍

http://4rdp.blogspot.com/2020/08/261.html


如圖所示圓上有 100 個點,順時鐘方向數值從 1 到 100 依序標示,現在選一個起始數字,順時針連續圈選數個,並將圈選的數值合計,例如
選 2, 3, 4 合計 9
選 99, 100, 1 合計 200

若總合為 4030,請問數字應從哪選到哪?

難度 

這題是 Andy 設計的,他說這題看似簡單,不過仍要動點腦筋才能解出。

11 則留言:

  1. 回覆
    1. 正解,請問您是甚麼靈感找出答案?

      刪除
  2. C 語言程式求解

    #include

    int main(void)
    {
    int m,n,k,sum1,sum2;

    for(k=1; k<=100; k++)
    {

    for(n=1; n<=1000; n++)
    {
    if ((k+n)<101) sum1=n*k+n*(n+1)/2-4030;
    if (sum1==0) break;
    if (sum1<0) {while (k+n>100) m=k+n-100; sum2=sum1 + m*(m+1)/2; }
    if (sum2==0) break;
    }

    if (sum1==0) break; if (sum2==0) break;
    }

    printf("\n k+n=%5d, K+1=%5d, m=%5d\n, sum1=%5d, sum2=%5d" ,k+n,k+1,m,sum1,sum2);

    return 0;
    }

    回覆刪除
    回覆
    1. 正解之一,這題還有第二解。
      謝謝您分享程式碼,排列組合類型,適合寫程式暴力破解。

      刪除
  3. 作者已經移除這則留言。

    回覆刪除
  4. 應該還有四組解
    46 到 5
    55 到 30
    69 到 51
    76 到 60

    回覆刪除
    回覆
    1. 哇!厲害!超乎預期,你還找出所有的解,我只是憑直覺應該有第二解。
      我的程式放在 這裡

      刪除
  5. 作者已經移除這則留言。

    回覆刪除
  6. C 語言程式碼

    #include

    int main(void)
    {
    int n,k;
    int sum;

    for(n=1;n<101;n++)
    for(k=1;k<101;k++)
    {sum=n*(n+1)/2+(100+k)*(101-k)/2;
    if(sum==4030)
    printf("k=%5d n=%5d\n",k,n);
    }

    return 0;
    }

    回覆刪除