条件下的数字模式
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;
}
我正在尝试编写一个程序,这样它会询问用户一个数字(为简单起见,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;
}