[关闭]
@Metralix 2016-10-06T07:29:00.000000Z 字数 596 阅读 718

PROBLEM F

LANGUAGE C

每两个相同长度的棍子能凑成一对,每两对能凑成一个框。
首先,找有多少对棍子,把所有长度输入一个数组,然后对这个数组排序;
从第一个数开始,如果下一个数和它相等,那么,记录h++,不等的话,跳到下一个长度,最终这个长度的对数应该是(h+1)/2............(这个公式是自己找规律的)
然后将h的值存入一个数组a[]={0},再把h清空,继续循环。
这个数组循环完了以后,所有长度的对数都在a[]中
然后用个for循环,将对数全部累加起来/2就是最终结果

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int n,i,j,temp;
  5. scanf("%d",&n);
  6. int asd[n];
  7. for(i=0;i<n;i++)
  8. {
  9. scanf("%d",&asd[i]);
  10. }
  11. for(i=0;i<n-1;i++)
  12. {
  13. for(j=i+1;j<n;j++)
  14. {
  15. if(asd[j]>asd[i])
  16. {
  17. temp=asd[j];
  18. asd[j]=asd[i];
  19. asd[i]=temp;
  20. }
  21. }
  22. }
  23. int g=0,h=0,sum=0,k;
  24. int a[100]={0};
  25. for(g=0;g<n;g++)
  26. {
  27. if(asd[g+1]==asd[g])
  28. {
  29. h++;
  30. }
  31. else
  32. {
  33. h=(h+1)/2;
  34. a[g]=h;
  35. h=0;
  36. }
  37. }
  38. for(k=0;k<n;k++)
  39. {
  40. sum+=a[k];
  41. }
  42. printf("%d",sum/2);
  43. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注