栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

codeforces-1343B-Balanced Array解题思路和代码 java 详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

codeforces-1343B-Balanced Array解题思路和代码 java 详解

分析:

这道题需要构建一个具体要求的数组(具体看下面)

1.前一半数组是偶数

2.后一半数组是奇数

3.所有的数组都各不相同,并且都是整数

4.前一半的和等于后一半的和

首先要先判断“YES”or“NO”,可以通过给的例子,在4、8时为“YES”其他情况为“NO”,可以猜出来可能是4的倍数,咱们现在想:当为n==4时是奇数和等于偶数和的,当n==6时,加了一个奇数在奇数数组中,又加了一个偶数在偶数数组中,肯定是不相等的。因此就肯定了必须是4的倍数。

其次根据上述结论,接下来需要找到偶数和等于奇数和规律,只要找到这个关系就可以把这道题给解出来。

        咱们先写出部分数组

        偶数数组[2,4,6,8] ,奇数数组[1,3,5,7]。这个数组长度为8,可以通过计算,前面的和比后面           的和多了4;

        [2,4,6,8,10,12] ,[1,3,5,7,9,11]。数组长度为12,可以通过计算,前面的和比后面的和多6;

        通过再多写计组例子,可得出结论,奇数数组比偶数数组少n/2,只需要在奇数数组最后+n/2即可;

因此通过上述分析,就可以写出代码了

Java代码:

import java.util.Scanner;

public class BalancedArray {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while (sc.hasNext()) {
			int t = sc.nextInt();
			// 有t组数据,每组数据运行一次
			while (t-- > 0) {
				int n = sc.nextInt();
				if (n % 4 == 0) {            //当是4的倍数时,开始打印
					System.out.println("YES");
					int even = 2;			//偶数初始值为2
					int odd = 1;			//奇数初始值为1
					for (int i = 0; i < n / 2; i++) {
						System.out.print(even + " ");
						even += 2;//每次加2
					}
					for (int i = 0; i < n / 2; i++) {
						if (i == (n / 2) - 1) {//当为最后一个数时,加n/2
							System.out.print(odd + n / 2);
						} else {
							System.out.print(odd + " ");
							odd += 2;//每次加2
						}
					}
					System.out.println();
				} else {					//当不是4的倍数时,直接输出NO
					System.out.println("NO");
				}
			}
		}
	}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/581615.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号