持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天。
一、题目
给定一个数组nums和一个目标值target,请你再该数组中找出和为目标值的那两个数,并返回数组的下标,你可以假设输入只会对应一个答案,但是数组的同一个元素不能使用两次。
二、解题思路
目的就是要求出两数之和等于目标值嘛。 就是把第一个数和后面 n-1 个数进行相加看那些等于目标值,第二个数个后面的 n-2 个数相加等于目标值.... 我们可以画一个图来表示:
这样看起来就简单一些
三、代码
#include <stdio.h>
int main()
{
int i;
int nums[i];
int target;
printf("请输入数组的元素个数:\n");
scanf("%d", &i);
printf("请输入数组的元素值:\n");
for (int j = 0; j <= i; j++) {
scanf("%d", &nums[j]);
}
printf("你输入的数组为:{");
for (int j = 0; j <= i; j++) {
printf("%d,", nums[j]);
}
printf("\b}\n");
printf("请输入目标值:\n");
scanf("%d", &target);
for(int k = 0; k <= i; k++ ) {
for (int l = k+1; l <= i; l++) {
if(nums[k] + nums[l] == target) {
printf("对应的数组元素为 nums[%d} nums=[%d]\n",k, l);
}
}
}
return 0;
}
xhh@cluo:~/study/leecode$ ./a.out 1-leecode.c
请输入数组的元素个数:
3
请输入数组的元素值:
1 2 3 4
你输入的数组为:{1,2,3,4}
请输入目标值:
7
对应的数组元素为 nums[2} nums=[3]
这个答案不唯一,甚至不满足题目的需求,因为这里如果输入 5 就会有两个答案,所以这里还不能说完美,如果只能一次的话可以加一个 do while循环:
#include <stdio.h>
int main()
{
int i;
int nums[i];
int target;
printf("请输入数组的元素个数:\n");
scanf("%d", &i);
printf("请输入数组的元素值:\n");
for (int j = 0; j <= i; j++) {
scanf("%d", &nums[j]);
}
printf("你输入的数组为:{");
for (int j = 0; j <= i; j++) {
printf("%d,", nums[j]);
}
printf("\b}\n");
printf("请输入目标值:\n");
scanf("%d", &target);
for(int k = 0; k <= i; k++ ) {
for (int l = k+1; l <= i; l++) {
if(nums[k] + nums[l] == target) {
do {
printf("对应的数组元素为 nums[%d} nums=[%d]\n",k, l);
}while(0);
return 0;
}
}
}
return 0;
}
xhh@cluo:~/study/leecode$ ./a.out 1-leecode.c
请输入数组的元素个数:
3
请输入数组的元素值:
1 2 3 4
你输入的数组为:{1,2,3,4}
请输入目标值:
5
对应的数组元素为 nums[0} nums=[3]
这样就成功返回一个值