给定一个元素不超过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;
}