切换到宽版
  • 7232阅读
  • 8回复

求助~~~ [复制链接]

上一主题 下一主题
离线stevenjl
 

只看楼主 倒序阅读 0 发表于: 2006-08-30
今天写我的第一个C程序,结果就出错了:
题目是USACO 3.1 Humble Numbers,我的程序是:
  1. /*
  2. ID: oifans1
  3. LANG: C
  4. TASK: humble
  5. */
  6. #include <stdio.h>
  7. int ss[103],k;
  8. long n;
  9. main()
  10. {
  11. FILE *output = fopen("humble.out","w");
  12. long cs[100003],dex[103],total;
  13. void duru();
  14. int i;
  15. cs[0]=1;
  16. duru();
  17. total=0;
  18. while(total < n)
  19. {
  20. long max;
  21. int maxi;
  22. max=2147483647;
  23. for (i=1;i <= k; i++)
  24.   {
  25.   long temp,j;
  26.   for (j=dex[i]; j <= total; j++)
  27.     {
  28.       temp= ss[i] * cs[j];
  29.       if (temp > cs[total])
  30.       {
  31.         if (temp < max) {max=temp; maxi=i;}
  32.         dex[i]=j;
  33.         break;
  34.       }
  35.     }
  36.   }
  37. cs[++total]=max;
  38. ++dex[maxi];
  39. }
  40. fprintf(output,"%d\n",cs[total]);
  41. fclose(output);
  42. return 0;
  43. }
  44. void duru()
  45. {
  46. FILE *input = fopen("humble.in","r");
  47. int i;
  48. fscanf(input,"%d%d",&k,&n);
  49. for (i=1;i <= k; i++)
  50.   {
  51.   fscanf(input,"%d",&ss[i]);
  52.   }
  53. fclose(input);
  54. }


结果:
  1. TASK: humble
  2. LANG: C
  3. Compiling...
  4. Compile: OK
  5. Executing...
  6.     Test 1: TEST OK [0.004 secs]
  7.     Test 2: TEST OK [0 secs]
  8.     Test 3: TEST OK [0.004 secs]
  9.     Test 4: TEST OK [0.004 secs]
  10.     Test 5: TEST OK [0.008 secs]
  11.     Test 6: TEST OK [0.04 secs]
  12.     Test 7: TEST OK [0.008 secs]
  13.     Test 8: TEST OK [0.012 secs]
  14.     Test 9: TEST OK [0.004 secs]
  15.     Test 10: TEST OK [0.004 secs]
  16.     Test 11: TEST OK [0 secs]
  17. > Test 12: Execution error: Your program (`humble') exited with
  18. signal #11 (segmentation violation [maybe caused by accessing memory
  19. out of bounds, array indexing out of bounds, using a bad pointer
  20. (failed open(), failed malloc), or going over the maximum specified
  21. memory limit]). The program ran for 0 CPU seconds before the signal.
  22.     ------ Test Case 12 -------
  23.     100 100000
  24.     2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541
  25.     ----------------------------
  26.     Test 12: SIGNAL 11


最后一个点过不去啊~~~求助~~~~

我用Pascal写了个一摸一样的:
  1. {
  2. ID: oifans1
  3. PROG: humble
  4. LANG: PASCAL
  5. }
  6. program usacohumble;
  7. var ss:array[0..100] of integer;
  8. k:integer;
  9. cs:array[0..100000] of longint;
  10. n:longint;
  11. procedure duru();
  12. var i:integer;
  13. begin
  14. read(k,n);
  15. for i:= 1 to k do
  16. read(ss[i]);
  17. end;
  18. procedure main;
  19. var
  20. dex:array[0..100] of longint;
  21. j,temp,max,total:longint;
  22. maxi,i:integer;
  23. begin
  24. fillchar(dex,sizeof(dex),0);
  25. cs[0]:=1;
  26. duru();
  27. total:=0;
  28. while total < n do
  29. begin
  30. max:=maxlongint;
  31.   for i:= 1 to k do
  32.   begin
  33.   for j:= dex[i] to total do
  34.   begin
  35.   temp:=ss[i]*cs[j];
  36.   if temp> cs[total] then
  37.     begin
  38.     if temp< max then begin max:=temp; maxi:=i; end;
  39.     dex[i]:=j;
  40.     break;
  41.     end;
  42.   end;
  43.   end;
  44. inc(total);
  45. cs[total]:=max;
  46. inc(dex[maxi]);
  47. end;
  48. writeln(cs[total]);
  49. end;
  50. begin
  51. assign(input,'humble.in');
  52. assign(output,'humble.out');
  53. reset(input);
  54. rewrite(output);
  55. main;
  56. close(output);
  57. end.


结果正确~郁闷~不过从几个数据可以看出来,C的确比Pascal快很多:
  1. TASK: humble
  2. LANG: PASCAL
  3. Compiling...
  4. Compile: OK
  5. Executing...
  6.     Test 1: TEST OK [0.004 secs]
  7.     Test 2: TEST OK [0 secs]
  8.     Test 3: TEST OK [0.004 secs]
  9.     Test 4: TEST OK [0.008 secs]
  10.     Test 5: TEST OK [0.02 secs]
  11.     Test 6: TEST OK [0.084 secs]
  12.     Test 7: TEST OK [0.02 secs]
  13.     Test 8: TEST OK [0.024 secs]
  14.     Test 9: TEST OK [0.004 secs]
  15.     Test 10: TEST OK [0 secs]
  16.     Test 11: TEST OK [0.004 secs]
  17.     Test 12: TEST OK [0.564 secs]
  18. All tests OK.
  19. Your program ('humble') produced all correct answers! This is your
  20. submission #69 for this problem. Congratulations!
Dream Walker...
离线郁闷的猪
只看该作者 1 发表于: 2006-08-30
C,我看不懂
离线archimedes

只看该作者 2 发表于: 2006-08-30
我看得懂c/c++,只是不会写
离线stevenjl

只看该作者 3 发表于: 2006-08-31
那帮我看看怎么错了啊?
Dream Walker...
离线cefly
只看该作者 4 发表于: 2006-09-01
还没发现错误。。。
离线archimedes

只看该作者 5 发表于: 2006-09-03
引用第5楼cefly2006-09-01 19:12发表的“”:
还没发现错误。。。
离线鹤舞白沙
只看该作者 6 发表于: 2006-10-04
我会C++
麻烦用c++改编一下
离线stevenjl

只看该作者 7 发表于: 2006-10-05
错误已经找到了,是数组没有赋予初始值
Dream Walker...
离线czhxdong
只看该作者 8 发表于: 2007-04-14
我能看懂TP OR FP , BUT 我不愿意用它们来写代码!
快速回复
限100 字节
 
上一个 下一个