【码图】711_两数之和 - 有序数组

给定一个元素不超过20的整数数组 numbers ,该数组已按非递减顺序排列,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1 和 index2。
从键盘输入数组元素个数、数组元素以及目标整数,用空格分开;
输出符合要求的两个整数的下标 index1 和 index2,输出用“,”分开
如果没有符合要求的结果,输出:No solution found.
示例 1:
输入:4 2 7 11 15 9
输出:1,2
解释:数组元素4个,分别为:2 7 11 15,目标为9,2 与 7 之和等于目标数 9 。因此 输出 1, 2 。
示例 2:
输入:10 1 2 3 4 5 6 7 8 9 18 19
输出:1,10
解释:数组元素10个,分别为:1 2 3 4 5 6 7 8 9 18,目标为19,1 与 18 之和等于目标数 19。因此 输出 1, 10 。
示例 3:
输入:10 1 2 3 4 5 6 7 8 9 18 28
输出:No solution found.
解释:数组元素10个,分别为:1 2 3 4 5 6 7 8 9 18,目标为28,没有符合要求的数。

使用了一下深度优先搜索算法

#include<stdio.h>
#include<stdlib.h>
#pragma warning(disable: 4996)

int index[2] = {-1,-1};
int count;
void dfs(int array[], int tar, int step, int n)
{
	if (count == 1) return;
	if (step == 2)
	{
		if ((array[index[0]] + array[index[1]]) == tar)
		{
			if (index[1] == index[0]) return;
			printf("%d,%d", index[0]+1, index[1]+1);
			count = 1;
			return;
		}
		
		return;
	}

	
	for (int i = 0; i < n; i++)
	{
		
		index[step] = i;
		dfs(array, tar, step + 1, n);
	}
}


int main()
{
	int n;
	int array[30];
	int target;
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &array[i]);
	}
	scanf("%d", &target);
	dfs(array, target, 0, n);
	if (count!=1)
	{
		printf("No solution found.\n");
		return 0;
	}
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值