数字可能出现重复了,但我没发现逻辑错误

念秋乐晚 2020-10-18 11:14:38
题目描述
珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。

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

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

(本题目为2014NOIP普及T1)

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

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


#include<stdio.h>
#include<math.h>

int main()
{
int n,count=0,j,b,i;
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(j==i)
continue;

for(b=j+1;b<n;b++)
{
if(b==i)
continue;
if(a[i]==a[j]+a[b])

count++;



}
}
printf("%d",count);
return 0;





}
...全文
261 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2020-10-19
  • 打赏
  • 举报
回复
换个思路,先按元素循环,再查找该元素是否与另外两个不同元素的和相等,就可以避免重复了

int main() {
char testdata[]={"5 0 5 1 4 2 3"}, *p=testdata; //用于测试
int n, i, j, k, cnt=0, *a;
//scanf("%d", &n);
n = 7; //用于测试
a = (int*)malloc(sizeof(int)*n);
for(i=0; i<n; i++) { //输入数据
//scanf("%d", &a[i]);
sscanf(p, "%d", &a[i]); p=strstr(p, " ")+1;
}
for(i=0; i<n; i++) { //换一下处理位置,先按元素循环
for (j=0; j<n-1; j++) { //再判断该元素是否与另外两个不同元素的和相等
if(j==i) continue;
for (k=j+1; k<n; k++) {
if (k==i) continue;
if (a[j]+a[k]==a[i]) {
printf("%d=%d+%d\n", a[i], a[j], a[k]);
cnt++;
break;
}
}
if (k<n) break;
}
}
printf("total: %d\n", cnt);
free(a);
return 0;
}

h2plus0 2020-10-19
  • 打赏
  • 举报
回复
有重复是因为上面程序, 在查找数字时, 比如,一个数, 可以有多种满足的数字, 例如: 5 = 2 + 3 也可以时 5 = 1+4 这样 count 会加两次, 但题目只要求计算5是否可以表示, 相当于只要求count+1
自信男孩 2020-10-19
  • 打赏
  • 举报
回复
#include<stdio.h>
#include <stdlib.h>
#include<math.h>

int main()
{
int n, sum, count=0;//,j,b,i;
int i, j, k;
int *arr;
scanf("%d",&n);

arr = (int *)malloc(sizeof(int) * n);
if (!arr)
return -1;

for(i=0;i < n; i++)
scanf("%d", &arr[i]);


for (i = 0; i < n; i++)
for (j = i+1; j < n; j++) {
sum = arr[i] + arr[j];

for (k = 0; k < n; k++) {
if (sum == arr[k] && k != i && k != j) {
printf("%d + %d = %d\n", arr[i], arr[j], arr[k]);
count++;
}
}
}

#if 0
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(j==i)
continue;

for(b=j+1;b<n;b++)
{
if(b==i)
continue;
if(a[i]==a[j]+a[b])

count++;



}
}
#endif
printf("%d\n",count);
free(arr);

return 0;
}

供参考~

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧