给定一个数组和一个数字,给定的数组里是否存在两个数字之和等于给定的数字

/*
	2014-10-19
	by 不吃青瓜
*/

/*
原题大概意思:

  给定一个数组a[10],数据范围 1-15
  另外给定一个数字 x,范围 2-10
  问是否能在数组 a 中找到两个数字的和等于 x
*/



#include<stdio.h>

bool findIt(int *arr , int n, int x)
{
	int temp[16];
	int i;

	for( i=0;i<16;i++)
		temp[i]=0;

	for( i=0;i<n;i++)
		temp[arr[i]]++;

	for( i=1;i<x/2;i++)
	{
		if(temp[i]!=0 && temp[x-i]!=0)
 			return true;
	}
	if(x%2==0)
		if(temp[x/2]>1)
			return true;

	return false;
}

int main()
{
	int arr[10]={6,5,3,2,4,8,9,5,4,14};
	int x = 10;
	if(findIt(arr,10,3))
		printf("YES\n");
	else printf("NO\n");

	getchar();
	getchar();
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以编写一个方法,接收两个数组作为参,然后遍历这两个数组,将对应位置的元素相加,得到一个新的数组,即为这两个数组的和。具体实现可以参考以下代码: ```java public static int[] sumArrays(int[] arr1, int[] arr2) { int len = Math.min(arr1.length, arr2.length); int[] result = new int[len]; for (int i = ; i < len; i++) { result[i] = arr1[i] + arr2[i]; } return result; } ``` 这个方法首先找到两个数组的最小长度,然后创建一个新的数组,长度为最小长度。接着遍历这两个数组,将对应位置的元素相加,存入新的数组。最后返回这个新的数组,即为这两个数组的和。 ### 回答2: 编写一个方法,用于计算给定两个数组之和。首先要明确的是,两个数组必须满足相同的长度,否则无法进行数组之间的加法运算。 代码实现时,可以定义一个名为“arraySum”的方法,该方法需要传入两个数组作为参,返回值为一个新的数组。在方法,首先判断两个数组的长度是否相等,如果不相等,则直接返回null。 如果两个数组长度相等,就可以顺序遍历这两个数组,将对应位置的元素相加,并存放到一个新的数组。具体实现代码如下: public int[] arraySum(int[] arr1, int[] arr2) { // 判断数组长度是否相等 if (arr1.length != arr2.length) { return null; } // 定义一个数组,存放计算结果 int[] result = new int[arr1.length]; // 顺序遍历两个数组,进行加法运算 for (int i = 0; i < arr1.length; i++) { result[i] = arr1[i] + arr2[i]; } // 返回计算结果数组 return result; } 在上述代码,方法arraySum返回的是一个新的数组,其每个元素是两个数组对应位置元素的和。如果两个数组的长度不相等,则直接返回null。如果参传入正确,数组加法计算做出相应的处理,并将计算结果放到一个数组,最后将新数组返回。 ### 回答3: 编写一个方法,计算给定两个数组之和: public static int[] sumArrays(int[] a, int[] b) { int[] sum = new int[a.length > b.length ? a.length : b.length]; // 开辟一个新的数组,长度为两个数组最长的那个 int carry = 0; // 进位 int i = a.length - 1; // 从数组 a 的最后一个元素开始遍历 int j = b.length - 1; // 从数组 b 的最后一个元素开始遍历 int k = sum.length - 1; // 从新数组 sum 的最后一个元素开始放起 // 从数组 a 和数组 b 的最后一个元素开始遍历,一直到两个数组所有元素都被遍历完 while (i >= 0 || j >= 0) { int x = i >= 0 ? a[i--] : 0; // 如果 i < 0,则将 x 设置为 0,否则将 x 设置为 a 数组第 i 个元素 int y = j >= 0 ? b[j--] : 0; // 如果 j < 0,则将 y 设置为 0,否则将 y 设置为 b 数组第 j 个元素 int z = x + y + carry; // 计算两个之和以及进位 sum[k--] = z % 10; // 将计算得出的结果放到新数组 sum carry = z / 10; // 保存进位 } // 如果最后还存在进位 if (carry != 0) { int[] result = new int[sum.length + 1]; // 数组长度加 1 result[0] = carry; // 第一个元素设置为进位 System.arraycopy(sum, 0, result, 1, sum.length); // 将 sum 数组复制到 result 数组 return result; } else { return sum; } } 这个方法用了数组的一些基本操作:遍历数组、下标索引、数组长度、进位等等。其的核心思想是将两个数组从最后一个元素开始计算,然后往前推,将结果保存到新数组。如果两个数组某个长度比另一个数组短,那么就将短数组的元素当作 0 来计算。在计算过程,如果有进位,那么就将进位的值保存下来,最后再将进位的值加到最高位上即可。 这个方法可以处理任意长度的整数组相加,甚至可以处理超过 long 类型值范围的大整相加。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值