写一个Java程序,输入一个正整数n,找到与其最接近的一个从1开始的连续奇数加和,打印这个奇数和以及这些加起来等于奇数和的连续奇数,对于这些加起来等于奇数和的连续奇数每个奇数的值代表符号【*】的个数,将符号按照金字塔的形状打印出来
package com.lll;
import java.util.Scanner;
/**
* LLL
* 2023年7月7日
* 写一个Java程序,输入一个正整数n,
* 找到与其最接近的一个从1开始的连续奇数加和,打印这个奇数和以及这些加起来等于奇数和的连续奇数,
* 对于这些加起来等于奇数和的连续奇数每个奇数的值代表符号【*】的个数,将符号按照金字塔的形状打印出来
*/
public class PyramidPrint {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个正整数n:");
int n = scanner.nextInt();
scanner.close();
int sum = 0; // 连续奇数和
int length = 1; // 连续奇数的个数
int num = 1; // 当前奇数
while (sum < n) {
sum += num;
num += 2;
length++;
}
int closestSum = 0; // 最接近n的连续奇数和
int closestLength = 1; // 最接近n的连续奇数的个数
int closestNum = 1; // 最接近n的奇数
if (Math.abs(sum - n) <= Math.abs((sum - num + 2) - n)) {
closestSum = sum;
closestLength = length - 1;
} else {
closestSum = sum - num + 2;
closestLength = length - 2;
}
System.out.println("最接近 " + n + " 的连续奇数和为:" + closestSum);
System.out.print("这个奇数和的连续奇数为:");
for (int i = 0; i < closestLength; i++) {
System.out.print(closestNum + " ");
closestNum += 2;
}
System.out.println();
System.out.println("按金字塔形状打印符号:");
int symbolCount = 1; // 符号(*)的个数
for (int i = 0; i < closestLength; i++) {
for (int j = 0; j < closestSum / 2 - symbolCount / 2; j++) {
System.out.print(" ");
}
for (int j = 0; j < symbolCount; j++) {
System.out.print("*");
}
System.out.println();
symbolCount += 2;
}
}
}