这是学校acm的一道题目,想让大家帮我指出我的代码问题!!
#include<stdio.h>
#include<string.h>
int main()
{
int arr[10005],brr[10005],n;//arr数组是储存重量的,brr是标记数组。
memset(arr,0,sizeof(arr)),memset(brr,0,sizeof(brr));
while(scanf("%d",&n)!=EOF)
{
int t;
for(t=0; t<n; t++)
scanf("%d",&arr[t]);
int acount=0;//船的数量
for(t=0; t<n; t++)
{
int a,c=0,j;
if(arr[t]==100)
{
brr[t]=1;
acount+=1;
}//刚好一百的直接标记。
if(t==n-1)//判断最后一个人的重量,因为我觉得是特殊情况,所以单独拿出来讨论。而且也是判断循环终止。
if(brr[n-1]==0)
{
acount+=1;
break;
}
else
break;
while(brr[t]!=0)//寻找不被标记起点。
t++;
for(j=t+1; j<n; j++)//寻找末尾终点。
{
if(j!=n-1)
while(brr[j]!=0)
j++;//寻找不被标记的点
if(arr[t]+arr[j]<=100)
{
if(a<arr[t]+arr[j])//大于之前的和就交换。
a=arr[t]+arr[j],c=j;//c是暂时储存有可能是终点的点。
}
}
if(c==0) brr[t]=1,acount+=1;//这两个就是标记和计数的。
else brr[t]=1,brr[c]=1,acount+=1;
}
printf("%d\n",acount);
}
return 0;
}
我的思路:找两个数组一个储存重量还有标记,标记的意义是让程序知道这个重量使用了,就是在数组中找一个重量,再遍历没有标记的重量中,与100最近的重量和。
我感觉我写的好麻烦额,我改了很久了,很难揪出根本的问题,好像我的逻辑一下子跳不出来,请广大热心网友指出我什么问题或者给一个样本代码我吗?网上真没有这道题目的答案。好坑额,谢谢