30分求助大佬,实在想不出还在哪有遗漏

P2141 [NOIP2014 普及组] 珠心算测验

注意读题 **其中有多少个数,恰好等于集合中另外两个(不同的)数之和** 可能出现两个数之和相同的情况的。
by lichenzhen @ 2023-10-29 15:41:05


@[cmd137](/user/1146202)
by lichenzhen @ 2023-10-29 15:42:31


@[lichenzhen](/user/703225) 感谢您的回答,但是我用了标记被减数的方法来排除您说的情况,比如4第一次作为被减数,第一次循环完之后flag[4]就变为1;之后被减数若又是4,flag[4]此时不是0,count++不运行,也就没有重复计数
by cmd137 @ 2023-10-29 16:36:01


@[cmd137](/user/1146202) 这题最好用桶来解决
by lichenzhen @ 2023-10-29 17:11:35


@[lichenzhen](/user/703225) 新手入门,还没有系统的学习,所以您能看出我的问题在哪不
by cmd137 @ 2023-10-29 18:51:41


flag[arr[i]] = 1;没有起到实际作用,它在第一和第二个循环中间,也就是说最里面的循环进行的时候可能有多个arr[j]+arr[k]==arr[i]但flag判断不在这里面,count可能加了很多次。 但如果放到最里面的循环可能这个flag[arr[]]作为了减数,这时候if判断不运行,就少算了可能的情况。 可以直接count++后让flag[arr[i]] = 1; 最后int x=0; flag数组中循环判断如果是1,x++,输出x,这样不管这个arr[i]有几种加的可能,他最后的权重都是x++,即只记录一次。
by Miaozi @ 2023-10-30 15:22:07


|