输入描述:
多组输入,一个整数(1~100),表示线段长度,即“*”的数量。
输出描述:
针对每行输入,输出占一行,用“*”组成的对应长度的线段。
示例1
输入:
10 2
复制输出:
********** **
上述是牛客网上的一道题,观察到这样一种解法可以通过
#include<stdio.h>
int main()
{
int n = 0;
int i = 0;
while (scanf("%d", &n) == 1)
{
for (i = 0; i < n; i++)
printf("*");
printf("\n");
}
return 0;
}
但我在visual studio进行运行时得到以下结果,和题干要求明显不符,但却能编译通过。
下面是我自己考虑之后写的代码:
int main()
{
int i = 0; //循环计数器 i,j
int j = 0;
int arr[100] = { 0 }; //对数组进行初始化
while (scanf("%d", &arr[i]) == 1)//将连续输入的数存入一维数组中
{
i++;
}
i = 0;
while ((arr[i] > 0)&&(i<100)) //读取数组中的数并进行循环
{
for (j = 0; j < arr[i]; j++)
printf("*");
printf("\n");
i++;
}
return 0;
}
由于输入的数和对应打印的符号是分离的,因此可以考虑用一维数组进行存储,理论上来讲上述以100(对应组数)为界是不合适的,但目前想不到更好的方法。
后续进行一维数组的读取时要记得一维数组的容量是100,进行限制,及i++,防止进入死循环(开始时,我就写错了)。
由于visual studio 的原因让scanf函数返回EOF要连续按三次ctri+z 理论上按一次就够了,但这并不影响牛客网的编译运行。
下面是运行结果,实现了输入输出的分离。