条件下的数字模式

Number Pattern under conditions

我正在尝试编写一个程序,这样它会询问用户一个数字(为简单起见,1-9)。

假设用户说 3,则此数字作为三角形图案的行数。

例如

Input - 3

_ _ _
_ _
_

Input - 5

_ _ _ _ _ 
_ _ _ _  
_ _ _ 
_ _  
_ 

其中_为待填空格

然后生成一个数字,其中包含用户提供的位数。 数字只能是奇数。

If input = 3
Number =  573, 397, 195 and all possible permutations.

然后程序应从每个数字中减去 1,并将它们打印为三角形。

例如

Input = 5
(Therefore Rows = 5, number of digit = 5)
Number = 33795

预期输出 -

2 2 6 8 4
2 6 8 4
6 8 4
8 4
4

我的首选语言是 Python,但在学习 C 语言时,欢迎提供任何语言的建议。

我的尝试-

第一种方法

#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int randomOdd(int base, int limit)
{
  int odd = 0;
  while (!(((odd = rand() % limit - base + 1) + base) % 2));
  return odd;
}


int main(void)
{
    int rows;
    int j;
    int A[100];
    scanf ("print %d",&rows);
    for(int i = 0; i < 5; i++)
    {
        A[i] = randomOdd(0, 10);
    }
    for (int i = 5; i > 0; i --)
    {
        for (j = rows - i; j < 5; j ++)
            printf("%d ", A[j]);
        printf("\n");
    }
return 0;
}

这会导致分段错误。

第二种方法 由于某种原因,这不会产生任何输出。

#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int randomOdd(int base, int limit)
{
  int odd = 0;
  while (!(((odd = rand() % limit - base + 1) + base) % 2));
  return odd;
}


int main(void)
{
    int rows;
    scanf ("print %d",&rows);
    
    int A[1000];
    
    for(int i = 0; i <= rows; i++)
    {
        A[i] = randomOdd(0, 10);
    }
    for (int m = rows; m > 0; m--)
    {
         for(int j=m-1; j>=0; --j) {
            printf("%d ", 9-A[j-1]);
        }
        printf("\n");
    }
return 0;
}

我想这对你有帮助。

from random import randint

inp = int(input())
numbers = [(randint(1, 9)-1) for i in range(inp)] # generate the random numbers

for i in  range(inp):
    for j in numbers:
        print(j, end="")
    numbers.pop(0)  # remove the first element from the list 
    print("")

编辑:
我稍微修改了您的代码,现在可以使用了。

#include<stdio.h>
#include<stdlib.h>
#define MAX 100

int randomOdd(int lower, int upper)
{ 
    int number = 0;
    while(number % 2 != 1){  // generate random numbers while the number is odd
        number = ((rand() % (upper - lower)) + lower) - 1;
    }
    return number;
}

int main()
{   
    int rows, i, j;
    int a[MAX];
    scanf("%d", &rows);
    srand(time(NULL));  // you need srand to be able to generate random numbers

    for(i = 0; i < rows; i++)
    {
        a[i] = randomOdd(1, 10);
    }
    for(i = 0; i<rows; i++)
    {
        for(j=i; j<rows; j++)
        {
            
            printf("%d ", a[j]);
        }
        printf("\n");
    }
    return 0;
}