目录
题目描述
珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。
某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他随机生成一个正整数集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?
最近老师出了一些测验题,请你帮忙求出答案。
输入格式
共两行,第一行包含一个整数n,表示测试题中给出的正整数个数。
第二行有 n 个正整数,每两个正整数之间用一个空格隔开,表示测试题中给出的正整数。
输出格式
一个整数,表示测验题答案。
输入输出样例
输入 #1
4
1 2 3 4
输出 #1
2
从题目中可知:
要输入一个整数n,表示测试题中给出的正整数个数,
还要输入n个正整数,表示测试题中给出的正整数,因此我们要定义数组。
问题是其中有多少个数,恰好等于集合中另外两个(不同的)数之和,从(不同的)可知集合中另外两个数之和和另一组集合中另外两个数之和不能相等,如果相等只算作一次
方案一:
#include<iostream>
using namespace std;
int a[105]={0}; //定义数组a表示测试题中给出的正整数
int main()
{
int n,sum=0,i,j,s,k,flag; //flag变量是开关
cin>>n;
for(i=1;i<=n;i++)
{
cin>>a[i];
} //输入这些数
for(k=1;k<=n;k++) //枚举a[k]的值
{
flag=0; //flag开关赋值为0
for(i=1;i<=n&&flag==0;i++) //枚举开头
{
for(j=i+1;j<=n&&flag==0;j++) //枚举结尾
{
if(a[j]+a[i]==a[k]) //如果这个a[k]的值等于开头a[i]+结尾a[j]的值
{
flag=1; //中断两个for循环(如图1)
}
}
} //flag变量中断两个for循环
if(flag==1) //表示之前中断了
{
sum++; //那就说明某两个数之和等于a[i]
}
}
cout<<sum; //输出测验题答案
return 0;
}
方案二:
#include<iostream>
using namespace std;
int a[105]={0},c[20005]={0}; //定义数组a表示测试题中给出的正整数,c表示桶排序的数组
int main()
{
int n,sum=0,i,j,s,k; //sum表示测验题答案定义初值0
cin>>n;
for(i=1;i<=n;i++)
{
cin>>a[i];
} //输入这些数
for(i=1;i<=n;i++) //枚举开头
{
for(j=i+1;j<=n;j++) //枚举结尾
{
c[a[i]+a[j]]++; //桶排序,存入c[开头a[i]+结尾a[j]的值]的下标上的数加1
}
}
for(i=1;i<=n;i++) //计算1~n其中有多少个数,恰好等于集合中另外两个(不同的)数之和
{
if(c[a[i]]!=0) //如果c[a[i]]!=0,那就说明某两个数之和等于a[i](如图2)
{
sum++; //sum就要加1
}
}
cout<<sum; //输出测验题答案
return 0;
}
图1:
图2:

无注释满分代码
代码1:
#include<iostream>
using namespace std;
int a[105]={0};
int main()
{
int n,sum=0,i,j,s,k,flag;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>a[i];
}
for(k=1;k<=n;k++)
{
flag=0;
for(i=1;i<=n&&flag==0;i++)
{
for(j=i+1;j<=n&&flag==0;j++)
{
if(a[j]+a[i]==a[k])
{
flag=1;
}
}
}
if(flag==1)
{
sum++;
}
}
cout<<sum;
return 0;
}
代码2:
#include<iostream>
using namespace std;
int a[105]={0},c[20005]={0};
int main()
{
int n,sum=0,i,j,s,k;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>a[i];
}
for(i=1;i<=n;i++)
{
for(j=i+1;j<=n;j++)
{
c[a[i]+a[j]]++;
}
}
for(i=1;i<=n;i++)
{
if(c[a[i]]!=0)
{
sum++;
}
}
cout<<sum;
return 0;
}