社区讨论

有的题解是错的,我也是服了,贴个AC代码出来

P1598[USACO03FEB] 垂直柱状图 Vertical Histogram参与者 8已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@mi7yjtvj
此快照首次捕获于
2025/11/21 05:43
4 个月前
此快照最后确认于
2025/11/21 05:43
4 个月前
查看原帖
CPP
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
//这个是对的。。。
using namespace std;

char c1[120];
int a[50],maxn=0;
int main() {
    for(int i=0;i<4;i++) {
        gets(c1);
        for(int i=0;c1[i]!='\0';i++) {
            if('Z'<c1[i] || c1[i]<'A')
                continue;
            a[c1[i]-'A']++;
        }
    }
	for(int i=0;i<26;i++) {    //计算高度maxn
        maxn=max(a[i],maxn);
    }
    for(int i=maxn;i>=1;i--) {    //反向盖楼
        int l=0,flag=0;
        for(int j=0;j<26;j++) {     //j为当前判断的位置,l为上一次输出的位置
			if(a[j]==i) {
                if(flag==0) {
					//flag为0说明没有输出过‘*’
					//     *
					// A B C 当前位置为2,上一次输出‘*’位置为0,空格数(2-1)*2=4个
                    for(int z=0;z<j-l;z++) {
                        cout<<"  ";
                    }
                } else {
					//输出过'*',那么就少输出一个空格,可以理解为有一个空格被‘*’占了
					//	*   *
					//	A B C 当前位置为2,上一次输出‘*’位置为0,空格数(2-1)*2-1=3个
                    for(int z=1;z<(j-l)*2;z++) {
                        cout<<' ';
                    }
                }
				//cout<<' ';多空格会W,我测试过
                if(flag==0)
                    flag=1;
                l=j;
                cout<<'*';
                a[j]--;
            }
        }
		cout<<endl; //需要换行,没有会W.......
    }
    cout<<"A B C D E F G H I J K L M N O P Q R S T U V W X Y Z";
    return 0;
}

回复

7 条回复,欢迎继续交流。

正在加载回复...