Vijos 珠心算测验

描述

珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练, 既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。

某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他随机生成一个正整数集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?

最近老师出了一些测验题,请你帮忙求出答案。

格式

输入格式

输入共两行,第一行包含一个整数 n,表示测试题中给出的正整数个数。

第二行有 n 个正整数,每两个正整数之间用一个空格隔开,表示测试题中给出的正整数。

输出格式

输出共一行,包含一个整数,表示测验题答案。

样例1

样例输入1

4
1 2 3 4

样例输出1

2

限制

对于 100%的数据,3 ≤ n ≤ 100,测验题给出的正整数大小不超过 10,000。

提示

由 1+2=3,1+3=4,故满足测试要求的答案为 2。注意,加数和被加数必须是集合中的两个不同的数。

来源

NOIP2014 普及组


开始代码:【有误】

#include<stdio.h>
int main()
{
	int n,i;//n表示测试题中给出的正整数个数
	 scanf("%d",&n);
	 int a[n];
	 for(i=0;i<n;i++) //将数据放入数组中
	 {
	 	scanf("%d",&a[i]);
	 }
	 int j,k,count=0;
	 for(i=0;i<n;i++) //三重循环,用a[i]表示加数,a[j]表示被加数,a[k]表示数组中任一数字。
	 for(j=0;j<n;j++)
	 for(k=0;k<n;k++)
	 {
	 	if( i != j && a[i]+a[j] == a[k]) count++;
	 }
	 printf("%d",count);
	return 0;
 } 

测试:



 

分析:

将测试数据代入,由结果可知是正确的,但在评测的时候系统显示错误。

再仔细审题: >>>其中有多少个数,恰好等于集合中另外两个(不同的)数之和?

也就是说,只要这个数可以由数组中另两个数表示,则count加一,即使他可以有多种组合方式,都只算一种,因为针对的都是这一个数。

那样的话,如上面的测试数据5,此时,3=1+2,4=1+3,5=1+4=2+3 ,结果应为3


重新编写代码:

#include<stdio.h>
#include<string.h> //使用memset
int main()
{
	int n,i;//n表示测试题中给出的正整数个数
	 scanf("%d",&n);
	 int a[n];
	 for(i=0;i<n;i++)
	 {
	 	scanf("%d",&a[i]);
	 }
	 int j,k,count=0,b[100];
	 memset(b,0,sizeof(b)); //清空数组
	 for(i=0;i<n;i++)
	 for(j=0;j<n;j++)
	 for(k=0;k<n;k++)
	 {
	 	if( i != j && a[i]+a[j] == a[k]) b[k]=a[k]; //若存在满足条件的数,将这个数放于数组b中
	 }
	 for(k=0;k<n;k++)
	 {
	 	if(b[k]>0) count++;
	 }
	 printf("%d",count);
	return 0;
 } 

测试数据:




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值