输入
1 1 3 1
输出
#
#
####
输入
0 3 0 4 5
输出
#
##
# ##
# ##
# ##
这是我到目前为止的代码..
#include <stdio.h>
int main (void){
int height[80],length=0,max=0;
while ((scanf("%d",&height[length++])) != EOF && length <=79) {
if (height[length-1] > max) {
max=height[length-1];
}
}
}
输入不得包含不超过80个值。 我不完全确定如何从这里添加更多代码。
答案 0 :(得分:3)
length -= 1;
for(;max>=0;--max){
for(int i = 0; i < length; ++i){
putchar(height[i] > max ? '#' : ' ');
}
putchar('\n');
}
while ((scanf("%d",&height[length++])) != EOF && length <=79){
也是错误的
这是因为在读取height[79]
后不会执行while-body
因此,例如,修改如下。
#include <stdio.h>
#define DATA_MAX_LEN 80
int main (void){
int height[DATA_MAX_LEN], length = 0, max = 0;
for(int len = 0, h; len < DATA_MAX_LEN && scanf("%d", &h) == 1; ++len){
height[length++] = h;
if (height[length-1] > max){
max=height[length-1];
}
}
while(max--){
for(int i = 0; i < length; ++i){
putchar(height[i] > max ? '#' : ' ');
}
putchar('\n');
}
}
答案 1 :(得分:2)
找到arr[]
中存储的所有输入的最大高度。现在有一个外部循环从最大高度j
迭代hm
直到1.外循环的每次迭代,遍历内循环的所有值并检查是否arr[i] >= j
。如果是,请打印#
否则打印一个空格。
int arr[80];
int n;
cin>>n;
int hm = -1;
for(int i = 0; i < n; i++){
cin>>arr[i];
hm = max(hm, arr[i]);
}
for(int i = hm; i > 0; i--){
for(int j = 0; j<n; j++){
if(arr[j]>=i)
cout<<"#";
else cout<<" ";
}
cout<<'\n';
}
答案 2 :(得分:2)
这可能适合你。
#include <stdio.h>
#define MAX 100
int main(void) {
int st[MAX];
int n = 0;
int i, j;
int max_value = -1;
while (scanf("%d", st + n) != EOF) {
if (st[n] > max_value)
max_value = st[n];
++n;
}
for (i = max_value; i > 0; --i) {
for (j = 0; j < n; ++j) {
if (st[j] >= i)
printf("#");
else
printf(" ");
}
printf("\n");
}
return 0;
}
0 3 0 4 5 "Enter" "Ctrl+D"
#
##
# ##
# ##
# ##
答案 3 :(得分:2)
我根据问题中的代码编写了这段代码。这将逐个获得输入数字。它最多只能消耗80个数字。
void draw(const int* height, int length, int max)
{
char* t_mat;
char* mat;
size_t mat_size = length * max * sizeof(char);
t_mat = (char*)malloc(mat_size);
mat = (char*)malloc(mat_size);
// build transposed graph
for (int i = 0; i < length; i++) {
int value = height[i];
for (int j = max - 1; j >= 0; j--) {
if (j + value >= max)
t_mat[i * max + j] = '#';
else
t_mat[i * max + j] = ' ';
}
}
// tanspose t_mat to mat
for (int i = 0; i < max; i++)
for (int j = 0; j < length; j++)
mat[i * length + j] = t_mat[j * max + i];
// print
for (int i = 0; i < max; i++) {
for (int j = 0; j < length; j++)
printf("%c", mat[i * length + j]);
printf("\n");
}
free(t_mat);
free(mat);
}
int main()
{
int height[80], length=0, max=0;
while (length < 80 && scanf("%d",&height[length++]) != EOF) {
// update max number
if (height[length-1] > max)
max=height[length-1];
// draw the graph with the updated number
draw(height, length, max);
}
}
此方法首先创建输入的 transposed 版本。例如,如果您的输入序列是:
5 3 0 4 5
此代码首先创建一个char
矩阵,对应于:
##### // 5 #'s in this row
### // 3 #'s in this row
// 0 #'s in this row
#### // 4 #'s in this row
##### // 5 #'s in this row
然后转置它以获得所需的图表:
# #
# ##
## ##
## ##
## ##
如果您编译它并使用此输入序列运行它:5 3 0 4 5
您将获得以下输出序列。
5 // <- your input
#
#
#
#
#
3 // <- your input
#
#
##
##
##
0 // <- your input
#
#
##
##
##
4 // <- your input
#
# #
## #
## #
## #
5 // <- your input
# #
# ##
## ##
## ##
## ##
此程序将在消耗80个输入数字后终止。