题目如下:
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
*****
***
*
***
*****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:
19 *
输出样例:
*****
***
*
***
*****
2
题解如下:
又差2分啊啊啊啊啊啊啊啊啊到底为什么!!!!!!!
我的这个想法就是 判断目前剩余符号数量是否大于我即将要用到的符号数量,如果大于,就给他unshift和push这个数,这样就能形成我想要输出的每行的符号数量,同时剩余数量慢慢减少,每行的符号数量慢慢增加
最后输出的时候,不想双重循环打印,就去mdn搜了一下字符repeat的方法,果然有!哈哈哈哈,js真的很方便咱就是说,分别把空格数和符号数repeat一下拼起来输出就可以了
但是 我真的没看出来哪里差了2分,好烦
今天发邮件过了一个笔试,开心,希望面试也能过
var readline = require('readline');
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('line', function (data) {
var arr = data.split(' ')
deal(arr[0], arr[1]);
})
function deal(num, str) {
if(num == 1) {
console.log(str);
return;
}
var odd = 1;
var strArr = [];
while(num >= odd * 2) {
if(odd == 1) {
strArr.push(odd);
num -= odd;
} else {
strArr.push(odd);
strArr.unshift(odd);
num -= odd * 2;
}
odd += 2;
}
for(var i = 0; i < strArr.length; i++) {
// 空格处理
var out = ' '.repeat((strArr[0]-strArr[i])/2) + str.repeat(strArr[i]);
console.log(out);
}
if(num != 0) {
console.log(num);
}
}
2024/03/04更新
借鉴了网上的思路,满分了,但是还是没弄明白之前的写法为什么有问题
/**
* 2024/03/04
* 20/20
*/
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let total,
maxN = 1,
maxN1,
symbol;
rl.on("line", function (data) {
const arr = data.split(" ");
total = Number(arr[0]);
symbol = arr[1];
getMaxNum();
});
function getMaxNum() {
// 剩下的个数
total -= 1;
// 最多符号的个数
while (total >= (maxN + 2) * 2) {
total -= (maxN + 2) * 2;
maxN += 2;
}
maxN1 = maxN;
operation(true);
console.log(" ".repeat((maxN - maxN1) / 2).concat(symbol.repeat(maxN1)));
maxN1 += 2;
operation(false);
console.log(total);
}
// 正反输出
function operation(flag) {
for (let i = 3; i <= maxN; i += 2) {
let str = "";
str = " ".repeat((maxN - maxN1) / 2).concat(symbol.repeat(maxN1));
flag ? (maxN1 -= 2) : (maxN1 += 2);
console.log(str);
}
}