标题:这是学校acm的一道题目,想让大家帮我指出我的代码问题!!
只看楼主
仔太
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-11-16
结帖率:100%
已结贴  问题点数:20 回复次数:3 
这是学校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最近的重量和。
我感觉我写的好麻烦额,我改了很久了,很难揪出根本的问题,好像我的逻辑一下子跳不出来,请广大热心网友指出我什么问题或者给一个样本代码我吗?网上真没有这道题目的答案。好坑额,谢谢
搜索更多相关主题的帖子: 代码 int 储存 while for 
2017-12-05 11:09
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:20 
这条题我竟然看过~而且细看还能看懂做法~
我先不看你的做法就这题而言很简单啊~属于二级算法题~

先qsort(sort)一下~就是头尾指针标记最小的和最大的匹配看看有没有超过重量~
没有就作为一对,有就单独拿出来~
然后头尾指针往中间方向靠拢~

好像不需要标记数组~

到底还是贪心算法思想~

https://bbs.bccn.net/viewthread.php?tid=483017&page=1#pid2652444

PS:感觉和这贴的思想多少有点类似,可以参考一下~

[此贴子已经被作者于2017-12-5 11:24编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-12-05 11:22
仔太
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-11-16
得分:0 
回复 2楼 九转星河
谢谢星河,问题解决了,我采用你那种方法,ac了。再一次谢谢了
2017-12-05 23:19
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 3楼 仔太
哈哈~不用客气~你ac了说得其实我也可以ac了~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-12-06 07:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-483121-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.550599 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved