题目中问的是有多少个数可以由其他两个数组合,而不是有都是种组合,用一个桶就好了,反正数据范围不大。(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