hyfm.net
当前位置:首页 >> 从数组中找出三数之和为n >>

从数组中找出三数之和为n

考虑每组中第一个数的与组号的关系可知3=1*2+1;5=2*2+1;7=3*2+1.因此第n组第一个元素大小为2n+1.又因为每组三数只和为(第一个元素*6),所以m=6*(2n+1)

首先对数组进行排序,时间复杂度为(N*log2N).然后令i = 0,j = n-1,看arr[i] + arr[j] 是否等于Sum,如果是,则结束.如果小于Sum,则i = i + 1;如果大于Sum,则 j = j 1.这样只需要在排好序的数组上遍历一次,就可以得到最后的结果,

//最简单的方法 import java.util.*; public class Max_MinDemo{ public static void main(String[] args){ int[] arr = {12,3,56,128,58,98}; Arrays.sort(arr); System.out.println("最大值:"+arr[arr.length-1]); System.out.println("最小值:"+arr[0]); } }

规律:第一组第一个数是1 第n组的第一个数是n 每组数中 第二个是第一个数的2次方 第三个数是第一个数的3次方 每组有3个数 所以第100组为(100,10000,1000000) 前一个问题还没想好 你继续发布一次节日礼物那个问题

用2个for循环就ok

#include<stdio.h> #define N 10 #define OK 1 void display(int a[]){ /*输出数组*/ for(int i=0; i<N; i++) { printf("%3d",*(a+i)); } printf("\n");}void scan(int *a){ printf("请输入10个整数:"); for(int i=0; i<N; i++) scanf("%d",(a+i));}int Search(int

int arr[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};//假设这是你输入的数 int nFind = 4;//要查找的数填这里 for(int i = 0; i { if(arr[i] == nFind ) cout }

可以用冒泡法,就是先将数组的第一个数字设定为最大的,然后做个循环,依次比较从第二到最后一个数和第一个数字的大小,如果比第一个大,就将那个数字做为最大的并记录下位置,这样就可以找出最大的数了,最小的也是一样

int main() { int a[100]; int i, j, k, m, n; char c; printf("请输入一组按升序排序过的数(空格分隔,回车结束):"); for (i=0; i<100; i++) { scanf("%d%c", &a[i], &c); if (c == '\n') { i++; break; } } printf("请输入一个数:"); scanf("%d", &n);

你好!遍历不就完了吗把把第一个数赋给一个变量,然后用这个变量和数组遍历仅代表个人观点,不喜勿喷,谢谢.

rtmj.net | yydg.net | lyxs.net | zxqs.net | bfym.net | 网站首页 | 网站地图
All rights reserved Powered by www.hyfm.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com