输入包含多组数据,每组数据包含一个字符串s。
s仅包含数字,长度不超过100。
对应每一组数据,依次为十种产品绘制高度等于其销量的“*”柱图。
直方图的高度等于数据中数量最多产品的个数,如果某种产品高度不到直方图的高度,用空格补全。
直方图下方依次输出0到9作为坐标。
0123456789123 123012312
*** ********** 0123456789 ** *** **** 0123456789
#include<iostream>
#include<string>
using namespace std;
//以数字出现次数(产量)为纵坐标画柱状图
int main(){
string a;
while(cin>>a){
int i,j,max=0,num[10]={0};
for(i=0;i<a.length();i++)num[a[i]-'0']++; //统计每个数字出现的次数
for(i=0;i<10;i++)if(num[i]>max)max=num[i]; //找到最大次数,即柱状图层数
for(i=max;i>0;i--){ //画柱状图,i为当前层数
for(j=0;j<10;j++){if(i>num[j])cout<<' ';else cout<<'*';} //画每一层,次数小于层数输出空格
cout<<endl;
}
cout<<"0123456789"<<endl; //标出横轴
}
return 0;
}
#include<stdio.h>
#include<string.h>
int main (){//the shorter,the better.
int i,m,len,p[10];char s[101];
for(;~scanf("%s",s);printf("0123456789\n")){
for(len=strlen(s),memset(p,0,sizeof(p)),m=i=0;i<len;++p[s[i]%48],m=p[s[i]%48]>m?p[s[i]%48]:m,++i);
for(;m>0;--m,printf("\n"))for(i=0;i<10;printf(p[i++]<m?" ":"*"));
}
}
import sys
from collections import Counter
#从上到下输出直方图
def printHistogram(string):
c = Counter(string)
height = c.most_common(1)[0][1]
for i in range(0, height):
layer = "" #每一层的字符串
for num in "0123456789":
if c[num] + i >= height: #这个if else是核心逻辑
layer += "*"
else:
layer += " "
print (layer)
print("0123456789")
for i in sys.stdin.readlines():
printHistogram(i)
num = input()
temp = str(num)
count = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
for i in temp:
if i == "0":
count[0] += 1
elif i == "1":
count[1] += 1
elif i == "2":
count[2] += 1
elif i == "3":
count[3] += 1
elif i == "4":
count[4] += 1
elif i == "5":
count[5] += 1
elif i == "6":
count[6] += 1
elif i == "7":
count[7] += 1
elif i == "8":
count[8] += 1
elif i == "9":
count[9] += 1
maxV = max(count)
for i in range(maxV):
for j in range(10):
if count[j] < (maxV - i):
print(" ", end='')
else:
print("*", end='')
print("")
print("0123456789")
为啥自己在VScode中运行这个代码完全没问题,而上传后直接说答案错误?还请大神排忧解难😭
#include<stdio.h>
#include<string.h>
int main(){
char res[105]; //输入的字符串
int num[15]; //对每个数的出现次数的记录
while(~scanf("%s",&res)){
int i,j,k,h,maxx;
maxx=0;
memset(num,0,sizeof(num)); //如果是int 只能初始化0或-1
for(i=0;i<strlen(res);i++){
num[res[i]-'0']++;
}
for(j=0;j<=9;j++){
if(num[j]>=maxx){
maxx=num[j];
}
}
for(k=maxx;k>0;k--){
for(h=0;h<=9;h++){
if(num[h]>=k){
printf("*");
}
else{
printf(" ");
}
}
printf("\n");
}
printf("0123456789\n");
}
}
#include <bits/stdc++.h>
#define PI 3.1415927
using namespace std;
typedef long long ll;
int arr[10];
int main(void)
{
string s;
while(cin>>s)
{
fill(arr,arr+10,0);
int Max=-1;
for(int i=0;i<s.size();i++)
{
arr[s[i]-'0']++;
Max=max(Max,arr[s[i]-'0']);
}
for(int i=Max;i>0;i--)
{
for(int j=0;j<=9;j++)
{
if(arr[j]==i)
{
cout<<'*';
arr[j]--;
}
else
cout<<' ';
}
cout<<endl;
}
cout<<"0123456789"<<endl;
}
return 0;
} // 先统计每样产品的个数,然后选出最高(数量最多)的产品;
//从最高的层数开始画*,如果数量匹配则输出,同时数量减一;
//数量与高度不相等则输出' ',这样就实现了。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string in;
while (cin>>in)
{
int cnt[10] = {0};
for (int i=0; i<in.length(); i++)
{
cnt[in[i]-'0']++;
}
int height = 0;
for (int i=0; i<10; i++)
{
if (height < cnt[i])
height = cnt[i];
}
for (int j=height; j>0; j--)
{
for (int i=0; i<10; i++)
{
if (cnt[i] == j)
{
cout<<'*';
cnt[i]--;
}
else
cout<<' ';
}
cout<<endl;
}
cout<<"0123456789"<<endl;
}
system("pause");
return 0;
}
#include<stdio.h>
int main(int argc, char** argv){
char s[100];
while(gets(s)){
int data[10]={0,0,0,0,0,0,0,0,0,0};
int index=0; //s index
while(s[index]){ data[s[index++]-'0']++; }
int max=-1;
for(int i=0; i<10; ++i){ if(data[i]>max) max=data[i]; }
for(int i=0; i<max; ++i){
for(int j=0; j<10; ++j){
if(data[j]-max+i >= 0) printf("*");
else printf(" ");
}
printf("\n");
}
printf("0123456789\n");
}
return 0;
} import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
String s = sc.nextLine();
Map<Integer,Integer> map = new HashMap<>();
int max = -1;
int max_index = -1;
for(int i = 0 ; i < s.length() ; i++) { // 遍历字符串
int n = s.charAt(i) - '0';
if(map.containsKey(n)) {
map.put(n,map.get(n) + 1);
if(max <= map.get(n)) { // 更新最大值
max = map.get(n);
max_index = n;
}
} else {
map.put(n, 1);
}
}
// 输出
for(int i = max ; i > 0 ; i--) {
for(int j = 0 ; j < 10 ; j++) {
if(map.containsKey(j)) {
if(i <= map.get(j)) {
System.out.print("*");
} else {
System.out.print(" ");
}
} else {
System.out.print(" ");
}
}
System.out.println();
}
System.out.println("0123456789");
}
}
}
首先统计各个数字出现的次数,并找出出现最多的次数
然后从[maxCnt,1]高度区间依次输出,如果数字j出现的次数不少于i次,则输出*,否则输出空格。
#include <iostream>
(720)#include <cstring>
using namespace std;
int main() {
char str[101] = {'\0'};
while (scanf("%s", str) != -1) {
int count[10] = {0}, maxCnt = 0;
//统计各个数字出现的次数,并找出出现最多的次数
for (int i = (int)strlen(str) - 1; i >= 0; --i) {
if (++count[str[i] - '0'] > maxCnt) {
maxCnt = count[str[i] - '0'];
}
}
//从[maxCnt,1]高度区间依次输出
for (int i = maxCnt; i > 0; --i) {
//如果数字j出现的次数不少于i次,则输出*,否则输出空格
for (int j = 0; j < 10; ++j) {
printf("%c", (count[j] < i ? ' ' : '*'));
}
printf("\n");
}
printf("0123456789\n");
}
return 0;
}
————————————————
版权声明:本文为CSDN博主「hestyle」的原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://hestyle.blog.csdn.net/article/details/104728241
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char s[100];
while(gets(s))
{
int num[10] = {0};//记录等于0~9的值的数量
for(int i = 0; s[i] != '\0'; i++)
num[(int)(s[i] - '0')]++;
int max_loc = 0;
int i;
for(i = 1; i < 10; i++)
{
if(num[i] > num[max_loc])
max_loc = i;
}
int temp = num[max_loc];
for(i = 0; i < 10; i++)
num[i] -= temp;
while(temp--)
{
for(i = 0; i < 10; i++)
{
if(num[i] < 0)
printf(" ");
else
printf("*");
num[i]++;
}
printf("\n");
}
printf("0123456789\n");
}
return 0;
} #include<iostream>
#include<cstring>
using namespace std;
int main(){
string s;
while(cin>>s){
int a[10]={0};
int max=0;
int maxk;
for(int i=0;i<s.size();i++){
int k=0;
k=s[i]-'0';
++a[k];
if(a[k]>max) {max=a[k];}
}
while(max>0){
for(int p=0;p<10;p++){
if(a[p]==max){
cout<<'*';
a[p]--;
}
else cout<<' ';
}
max--;
cout<<endl;
}
cout<<"0123456789"<<endl;
}
return 0;
}
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while (input.hasNext()) {
String string = input.nextLine();
Map<Integer, Integer> map = new LinkedHashMap<>();
int[] index = new int[10];
for (char var: string.toCharArray()) {
index[var - '0']++;
}
for (int i = 0; i < index.length; i++) {
map.put(i, index[i]);
}
List<Map.Entry<Integer, Integer>> list = new ArrayList<Map.Entry<Integer, Integer>>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>(){
@Override
public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
return o2.getValue() - o1.getValue();
}
});
// System.out.println(list);
int max = list.get(0).getValue();
int temp = max;
for (int i = 0; i < max; i++) {
for (Map.Entry<Integer, Integer> entry: map.entrySet()) {
if (entry.getValue() == temp) {
System.out.print("*");
int t = entry.getValue() - 1;
map.put(entry.getKey(), t);
}
else System.out.print(" ");
}
temp--;
System.out.println();
}
String num = "0123456789";
System.out.println(num);
}
}
} import java.io.BufferedInputStream;
import java.util.Scanner;
public class Test1031Histogram {
public static void main(String[] args) { Scanner in = new Scanner(new BufferedInputStream(System.in)); while (in.hasNextLine()) { String str=in.nextLine(); int []a=new int [10]; for(int i=0;i<str.length();i++){ char ch=str.charAt(i); a[(int)(ch-'0')]++; } int max=getMax(a); while (max!=0) { for(int i=0;i<a.length;i++){ if(a[i]==max){ System.out.print("*"); a[i]--; }else { System.out.print(" "); } } System.out.println(); max=getMax(a); } System.out.println("0123456789"); } }
public static int getMax(int a[]) { int max=a[0]; for(int i=0;i<a.length;i++){ if(max<a[i]){ max=a[i]; } } return max;
}
}
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string ss;
while(cin>>ss)
{
int Hash[10]={0},MAXN=0;
for(int i=0;i<ss.length();i++)
{
Hash[ss[i]-'0']++;
if(Hash[ss[i]-'0']>MAXN)MAXN=Hash[ss[i]-'0'];
}
int num=0;
for(int i=0;i<10;i++)
{
if(Hash[i]!=0)num++;
}
char out[101][101];
// for(int i=0;i<101;i++)
// fill(out,out+101,' ');
for(int i=0;i<101;i++)
{
for(int j=0;j<101;j++)
out[i][j]=' ';
}
for(int i=0;i<10;i++)
{
if(Hash[i]>0)
{
for(int j=0;j<Hash[i];j++)
{
out[j][i]='*';
}
}
}
for(int i=MAXN-1;i>=0;i--)
{
for(int j=0;j<10;j++)
{
cout<<out[i][j];
}
cout<<endl;
}
cout<<"0123456789"<<endl;
}
return 0;
}
思路:就是绘制直方图。
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main(void)
{
string s;
while (cin >> s)
{
int arr[10] = {0};
for (int i = 0; i < s.size(); i++)
{
arr[s[i] - '0']++;
}
int max = 0;
for (int j = 0; j < 10; j++)
{
if (arr[j] > max)
{
max = arr[j];
}
}
for (int i = max; i > 0; i--)
{
for (int j = 0; j < 10; j++)
{
if (arr[j] >= i)
{
cout << "*";
}
else
{
cout << " ";
}
if (j == 9)
{
cout << endl;
}
}
}
cout << "0123456789" << endl;
}
}