这是一道很水的题,主要的难点在统计种子个数和打印。
如果要统计种子个数,可以开一个数组grade,其中数组下标表示种子种类。输入种子种类后进行遍历,如果输入的数字与数组下标相等则相应种子个数加一。
如果要打印,则可以开一个string数组存种子名称。打印种子个数时,可以开一个char数组存符号‘’,使用一个char 函数打印相应的种子个数(此法略麻烦且耗时)。还有一种方式是在打印时多用一个for循环来打印符号‘*’,这种方法简单且有效,但留给读者自行探索。 现在附上代码
#include <stdio.h>
#include <string>
#include <iostream>
#include <iomanip>
using namespace std;
char arr[1000];//定义个存‘*’的数组 用全局会方便点
//小麦 大麦 黑麦 燕麦 荞麦
//1 2 3 4 5
char *xin(int n)//一个改变arr数组存的‘*’的函数
{
int i;
for (i = 0; i < 10; i++)//初始化数组
{
arr[i] = '\0';
}
for (i = 0; i < n; i++)//存‘*’
{
arr[i] = '*';
}
return arr;
}
int main() {
int day;
string varieties[5] = {"Wheat", "Barley", "Rye", "Oats", "Buckwheat"};
scanf("%d", &day);
int grade[11] = {0}, num;
int i = 1;
int n;
for (n = 0; n < day; n++)
{
scanf("%d", &num);
for (i = 1; i <= 5; i++)//遍历进行匹配
{
if (num == i) {
grade[i]++;
}
}
}
cout << setiosflags(ios::left) << setw(16) << "Varieties" << "Seeds\n";//这里是左对齐,详情请百度
for (i = 1; i <= 5; i++) {
cout << setiosflags(ios::left) << setw(16) << varieties[i - 1] << setiosflags(ios::left) << setw(16) << xin(grade[i]) << endl;
}
return 0;
}