创建三角形数字模式 javascript 和垂直蛇数字模式正方形
create triangle numbers pattern javascript and verticaly snake number pattern square
我想创建三角形数字图案
let segitigaPola3 = num => {
let hasil = ''
for (let i = 1; i <= num; i++) {
for(let j = 0; j < i; j++) {
hasil += `${i} `
}
hasil += ` \n`
}
return hasil
}
console.log(segitigaPola3(5))
console.log()
console.log()
当前输出为:
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5
我想要的是类似
对于三角形:
1
2 3
4 5 4
3 2 1 2
3 4 5 4 3
和正方形像:
1 10 11 20 21
2 9 12 19 22
3 8 13 18 23
4 7 14 17 24
5 6 15 16 25
我怎样才能达到这样的效果?
感谢您的任何建议:)
对于三角形,我会为输出数字 (x
) 创建一个单独的变量,并为它是否应该加或减创建一个标志。
let segitigaPola3 = num => {
let hasil = ''
let x=1;
let add=true;
for (let i = 1; i <= num; i++) {
for(let j = 0; j < i; j++) {
hasil += `${x} `
add?x+=1:x-=1;
if(x===num || (x===1 && !add)) add=!add
}
hasil += ` \n`
}
return hasil
}
console.log(segitigaPola3(5))
对于三角形,这个形态有4个条件:
数字递增时:
- 如果当前数与
num
相同 ==> 是时候将流量转为递减了
- 否则,保持原样。
数字递减时:
- 如果当前数量达到1 ==> 是时候将流量转为增加了
- 否则,保持原样。
在下面的这段代码中,我使用now
和before
来跟踪当前process/flow是增加还是减少,然后检查当前数字是否到达转折点( 1 或 num
变量)。
let segitigaPola3 = num => {
let hasil = ''
let now = 1; // Set arbitrary counter
let before = 0;
for (let i = 1; i <= num; i++) {
for(let j = 0; j < i; j++) {
hasil += `${now} `;
console.log(now, before, num);
if (now > before) { // Check if the flow is increasing
if (now !== num) { // Check for the turning point (num)
now++;
before++;
} else {
now--;
before++;
}
} else {
if (now > 1) { // Check if the current still not reached the turning point
now--;
before--;
} else { // When the current reaches the turning point
now++;
before--;
}
}
}
hasil += ` \n`
}
return hasil
}
console.log(segitigaPola3(5));
对于正方形,基于列的元素有2个条件:
- 对于奇数列,它总是从上行到下行递增。这是查看模式的亮点:
Row no. | i ( = Col no.) | j
------------------------------
1 | 1 | 1
5 | 1 | 5
------------------------------
1 | 3 | 11
5 | 3 | 15
这总是从 (i-1)*num + 1
开始,一直增加到 (i*num)
结束,我们使用 j
来填充元素。
- 偶数列则相反。突出显示模式:
Row no. | i ( = Col no.) | j
------------------------------
1 | 2 | 10
2 | 2 | 9
------------------------------
1 | 4 | 20
2 | 4 | 19
根据上面的模式,这总是从 i*num
开始,一直增加到 (i-1)*num + 1
结束,我们使用 j
来填充元素。
function squareMaker(num) {
let result = '';
let arr = [];
for (let i = 1; i <= num; i++){
let temp = [];
// Generating the odd column elements
if (i % 2 != 0) {
for (let j = (i-1)*num + 1; j <= i*num; j++) {
temp.push(j);
}
}
// Generating the even column elements
else {
for (let j = i*num; j > (i-1)*num ; j--) {
temp.push(j);
}
}
arr.push(temp);
}
// Generating the result string.
for (let i = 0; i < num; i++){
for (let j = 0; j < num; j++) {
result += `${arr[j][i]} `;
}
result += '\n';
}
return result;
}
console.log(squareMaker(5));
对于三角形图案,您可以使用@depperm 的函数。垂直方蛇图案有点棘手:
function triangle(count) {
var result = "";
var x = 1;
var add = true;
for (var i = 1; i <= count; i++) {
for(var j = 0; j < i; j++) {
result += x + " ";
add ? x += 1 : x -= 1;
if(x === count || (x === 1 && !add)) add =! add;
}
result += " \n";
}
return result;
}
function square(count) {
var result = "";
var rows = [];
for (var i = 0; i < count; i++) {
if (i == 0) {
var row = [0];
for (var j = 0; j < count; j++) {
var num = (j + 1) % 2 == 0 ? (j + 1) * count : row[j] + 1;
row.push(num);
}
row.shift();
} else {
var row = [];
for (var j = 0; j < count; j++) {
var num = (j + 1) % 2 == 0 ? (rows[i - 1][j] - 1) : (rows[i - 1][j] + 1);
row.push(num);
}
}
rows.push(row);
result += row.join(" ") + "\n";
}
return result;
}
console.log(triangle(5));
console.log(square(5));
我想创建三角形数字图案
let segitigaPola3 = num => {
let hasil = ''
for (let i = 1; i <= num; i++) {
for(let j = 0; j < i; j++) {
hasil += `${i} `
}
hasil += ` \n`
}
return hasil
}
console.log(segitigaPola3(5))
console.log()
console.log()
当前输出为:
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5
我想要的是类似 对于三角形:
1
2 3
4 5 4
3 2 1 2
3 4 5 4 3
和正方形像:
1 10 11 20 21
2 9 12 19 22
3 8 13 18 23
4 7 14 17 24
5 6 15 16 25
我怎样才能达到这样的效果? 感谢您的任何建议:)
对于三角形,我会为输出数字 (x
) 创建一个单独的变量,并为它是否应该加或减创建一个标志。
let segitigaPola3 = num => {
let hasil = ''
let x=1;
let add=true;
for (let i = 1; i <= num; i++) {
for(let j = 0; j < i; j++) {
hasil += `${x} `
add?x+=1:x-=1;
if(x===num || (x===1 && !add)) add=!add
}
hasil += ` \n`
}
return hasil
}
console.log(segitigaPola3(5))
对于三角形,这个形态有4个条件:
数字递增时:
- 如果当前数与
num
相同 ==> 是时候将流量转为递减了 - 否则,保持原样。
- 如果当前数与
数字递减时:
- 如果当前数量达到1 ==> 是时候将流量转为增加了
- 否则,保持原样。
在下面的这段代码中,我使用now
和before
来跟踪当前process/flow是增加还是减少,然后检查当前数字是否到达转折点( 1 或 num
变量)。
let segitigaPola3 = num => {
let hasil = ''
let now = 1; // Set arbitrary counter
let before = 0;
for (let i = 1; i <= num; i++) {
for(let j = 0; j < i; j++) {
hasil += `${now} `;
console.log(now, before, num);
if (now > before) { // Check if the flow is increasing
if (now !== num) { // Check for the turning point (num)
now++;
before++;
} else {
now--;
before++;
}
} else {
if (now > 1) { // Check if the current still not reached the turning point
now--;
before--;
} else { // When the current reaches the turning point
now++;
before--;
}
}
}
hasil += ` \n`
}
return hasil
}
console.log(segitigaPola3(5));
对于正方形,基于列的元素有2个条件:
- 对于奇数列,它总是从上行到下行递增。这是查看模式的亮点:
Row no. | i ( = Col no.) | j
------------------------------
1 | 1 | 1
5 | 1 | 5
------------------------------
1 | 3 | 11
5 | 3 | 15
这总是从 (i-1)*num + 1
开始,一直增加到 (i*num)
结束,我们使用 j
来填充元素。
- 偶数列则相反。突出显示模式:
Row no. | i ( = Col no.) | j
------------------------------
1 | 2 | 10
2 | 2 | 9
------------------------------
1 | 4 | 20
2 | 4 | 19
根据上面的模式,这总是从 i*num
开始,一直增加到 (i-1)*num + 1
结束,我们使用 j
来填充元素。
function squareMaker(num) {
let result = '';
let arr = [];
for (let i = 1; i <= num; i++){
let temp = [];
// Generating the odd column elements
if (i % 2 != 0) {
for (let j = (i-1)*num + 1; j <= i*num; j++) {
temp.push(j);
}
}
// Generating the even column elements
else {
for (let j = i*num; j > (i-1)*num ; j--) {
temp.push(j);
}
}
arr.push(temp);
}
// Generating the result string.
for (let i = 0; i < num; i++){
for (let j = 0; j < num; j++) {
result += `${arr[j][i]} `;
}
result += '\n';
}
return result;
}
console.log(squareMaker(5));
对于三角形图案,您可以使用@depperm 的函数。垂直方蛇图案有点棘手:
function triangle(count) {
var result = "";
var x = 1;
var add = true;
for (var i = 1; i <= count; i++) {
for(var j = 0; j < i; j++) {
result += x + " ";
add ? x += 1 : x -= 1;
if(x === count || (x === 1 && !add)) add =! add;
}
result += " \n";
}
return result;
}
function square(count) {
var result = "";
var rows = [];
for (var i = 0; i < count; i++) {
if (i == 0) {
var row = [0];
for (var j = 0; j < count; j++) {
var num = (j + 1) % 2 == 0 ? (j + 1) * count : row[j] + 1;
row.push(num);
}
row.shift();
} else {
var row = [];
for (var j = 0; j < count; j++) {
var num = (j + 1) % 2 == 0 ? (rows[i - 1][j] - 1) : (rows[i - 1][j] + 1);
row.push(num);
}
}
rows.push(row);
result += row.join(" ") + "\n";
}
return result;
}
console.log(triangle(5));
console.log(square(5));