想不明白,请指点

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

题目中问的是有多少个数可以由其他两个数组合,而不是有都是种组合,用一个桶就好了,反正数据范围不大。(orz
by runtime_error @ 2018-12-29 10:39:32


@[runtime_error](/space/show?uid=92605) 什么意思
by wscxy @ 2018-12-29 11:54:27


@[runtime_error](/space/show?uid=92605) 那输入10,1...10,输出的组合是什么,能写给我一下吗
by wscxy @ 2018-12-29 11:55:38


@[runtime_error](/space/show?uid=92605) 哦哦,明白意思了,你的意思是可以由另外两个数加起来的就记1
by wscxy @ 2018-12-29 11:57:46


@[runtime_error](/space/show?uid=92605) 桶,什么意思
by wscxy @ 2018-12-29 11:59:36


我们开一个数组,范围到数据最大(maxn),对于给定序列中出现的数,数组对应坐标加1,可以记录序列中数出现的次数,也可以判断某些数是否在数组中出现,还可以实现排序(看数据范围),总之看你这么用吧。
by runtime_error @ 2018-12-29 12:06:02


@[wscxy](/space/show?uid=120556) 在使用桶时要注意判断数组是否越界
by runtime_error @ 2018-12-29 12:50:21


@[runtime_error](/space/show?uid=92605) 明白,谢谢
by wscxy @ 2018-12-29 13:50:33


@[runtime_error](/space/show?uid=92605) 这个50分 ``` #include<stdio.h> #include<cstdlib> #include<string.h> #pragma warning(disable:4996) int main() { int data[100],number,i = 0,j = 0, k = 0, total = 0; scanf("%d", &number); for (int i = 0; i < number; i++) { scanf("%d", data + i); } while (i++ < number) { for (j = 0; j < number; j++) { for (k = 0; k < number; k++) { if (i == j || i == k || j == k) continue; if (data[i] == data[j] + data[k]) { total++; j = number; k = number; } } } } printf("%d\n", total); system("pause"); return 0; } ``` 这个20分 ``` #include<stdio.h> #include<cstdlib> #include<string.h> #pragma warning(disable:4996) int main() { int data[100],number,i = 0,j = 0, k = 0, total = 0; scanf("%d", &number); for (int i = 0; i < number; i++) { scanf("%d", data + i); } while (i++ < number) { for (j = 0; j < number; j++) { for (k = 0; k < number; k++) { if (i == j || i == k || j == k) continue; if (data[i] == data[j] + data[k]) { total++; break; } } break; } } printf("%d\n", total); system("pause"); return 0; } ``` why?
by wscxy @ 2018-12-29 15:04:30


@[wscxy](/space/show?uid=120556) 先给你看看我的吧,我再慢慢看看你的 ``` #include <iostream> #include <cstdio> #include <algorithm> using namespace std; int a[110]; int t[10010]; int main() { int n,ans=0; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } for(int i=1;i<n;i++){ for(int j=i+1;j<=n;j++) if(a[i]+a[j]<=10000) t[a[i]+a[j]]++; } for(int i=1;i<=n;i++){ if(t[a[i]]) ans++; } printf("%d",ans); return 0; } ```
by runtime_error @ 2018-12-29 15:19:22


| 下一页