首页 > 试题广场 >

给定一个整数数组,判断其中是否有3个数和为N

[编程题]给定一个整数数组,判断其中是否有3个数和为N
  • 热度指数:4297 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解
给定一个整数数组,判断其中是否有3个数和为N

输入描述:
输入为一行
逗号前为一个整数数组,每个元素间用空格隔开;逗号后为N


输出描述:
输出bool值
True表示存在3个和为N的数
False表示不存在3个和为N的数
示例1

输入

1 2 3 4 5,10

输出

True

备注:
数组长度不超过2000,所以数均为int范围的正整数
看了一圈C组其他大佬们的多指针或者动态规划代码,很是敬佩。但作为小白,我也想简单分享一下自己的解法。
C语言解法:类似三指针思想。利用三重循环以及循环变量i,j,k分别从数组0号位开始遍历,其中i指向最前位,j指向下一位,k指向最后一位。三重循环遍历数组,如果存在3个循环变量之和等于求和数,则打印True并main函数返回0结束程序,否则循环结束后打印False并且结束。
#include<stdio.h>
#include<string.h>
int main()
{
    int a[2001]={0};
    int i=0,n=0,key=0,j,k;
    char c;
    while (scanf("%d",&a[i])!=EOF)
    {
        n++;
        i++;
        if((c=getchar())!=' ') break;
    }
    scanf("%d",&key);
    for(i=0;i<=n;i++)
    {
        for(j=i+1;j<=n;j++)
        {
            for(k=j+1;k<=n;k++)
            {
                if((a[i]+a[j]+a[k])==key)
                {
                    printf("True\n");
                    return 0;
                }
            }
        }
    }
    printf("False\n");
    return 0;
}


发表于 2021-08-19 10:47:18 回复(0)