原帖由 yth919 於 2008-11-2 16:26 發表
int i=0,b=0,minimum=0;
int min[10]={-1,-1,-1,70,-1,50,-1,100,-1,-1};
do{
      if(minimum


if(minimum<=min[ i ])
         minimum=min[ i ];

->

if(minimum>min[ i ])
         minimum=min[ i ];

TOP

你個array點解叫"min", 另外有個list[]又唔知用黎做乜.

以下是我將你個Program簡化完o既Code:
  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int i, min = -1;
  5.     int list[10] = {-1, -1, -1, 70, -1, 50, -1, 100, -1, -1};

  6.     for (i = 0; i < 10; i++)
  7.     {
  8.         if (min == -1 && list[i] != -1) min = list[i];

  9.         if (list[i] != -1 && list[i] < min)
  10.             min = list[i];
  11.     }

  12.     printf("%d\n", min);

  13.     return 0;
  14. }
複製代碼

TOP

原帖由 MacMonster 於 2008-11-2 21:59 發表
你個array點解叫"min", 另外有個list[]又唔知用黎做乜.

以下是我將你個Program簡化完o既Code:#include

int main()
{
    int i, min = -1;
    int list[10] = {-1, -1, -1, 70, -1, 50, -1, 100, -1, -1};

     ...


simplify even further
  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int i, min = -1;
  5.     int list[10] = {-1, -1, -1, 70, -1, 50, -1, 100, -1, -1};

  6.     for (i = 0; i < 10; i++) {
  7.         if (list[i]==-1) continue;
  8.         if (list[i] < min) min = list[i];
  9.     }

  10.     printf("%d\n", min);

  11.     return 0;
  12. }
複製代碼

TOP

應該要搵左第一個非-1 value
先可以再loop 個min
  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int i, min = -1;
  5.     int list[10] = {-1, -1, -1, 70, -1, 50, -1, 100, -1, -1};

  6.     for(i = 0 ; i < 10 ; i++)
  7.         if (list[i]!=-1){ min = list[i]; break; }

  8.     for ( ; i < 10; i++) {
  9.         if (list[i]==-1) continue;
  10.         if (list[i] < min) min = list[i];
  11.     }

  12.     printf("%d\n", min);

  13.     return 0;
  14. }
複製代碼

TOP

原帖由 thinkpanda 於 2008-11-2 22:31 發表


simplify even further #include

int main()
{
    int i, min = -1;
    int list[10] = {-1, -1, -1, 70, -1, 50, -1, 100, -1, -1};

    for (i = 0; i < 10; i++) {
        if (list==-1) continue; ...

Panda如果initialize min = -1
會唔work ga wor
  1. #include <stdio.h>

  2. const int INFINITY = 2147483647;
  3. int main()
  4. {
  5.     int min = INFINITY;int i;
  6.     int list[10] = {-1, -1, -1, 70, -1, 50, -1, 100, -1, -1};

  7.     for (i=0; i < 10; i++) {
  8.         if (list[i]==-1) continue;
  9.         if (list[i] < min) min = list[i];
  10.     }

  11.     printf("%d\n", min);
  12.     return 0;
  13. }
複製代碼

[ 本帖最後由 梁炳 於 2008-11-4 00:35 編輯 ]

TOP

原帖由 gotoho 於 2008-11-2 23:35 發表
應該要搵左第一個非-1 value
先可以再loop 個min#include

int main()
{
    int i, min = -1;
    int list[10] = {-1, -1, -1, 70, -1, 50, -1, 100, -1, -1};

    for(i = 0 ; i < 10 ; i++)
        if (list! ...


Not necessary, the following if statement is doing this
  1. if (min == -1 && list[i] != -1) min = list[i];
複製代碼

TOP

原帖由 bunch 於 2008-11-3 14:54 發表


Not necessary, the following if statement is doing thisif (min == -1 && list != -1) min = list;

but it is wasting time on every loop
why don't find it first at once?

TOP