编程训练计划
比赛题目
时间限制:C/C++ 1000MS,其他语言 2000MS
内存限制:C/C++ 256MB,其他语言 512MB
分数:100
描述
编程比赛已经临近了,小星觉得只用周末的时间来练习编程是远远不够的,小星和一起学习编程的小伙们商量了一下,打算制定周一到周五晚上的编程学习程计划,每天晚上练习一个小时的编程,当然小星和小伙伴并不是每天晚上都有时间来完成这个计划,毕竟学校的任务太多太多
现在请我们求出来,小星和小伙们能够学习编程人数最多一天的人数,分别都有哪几天,请按周一到周五的顺序输出,并用逗号分隔(不带空格)。
输入描述
第一行数,输入一个 n(0<=n<=100) 表示学习编程的人数
接下来 n 行,分别表示每一个小伙伴周一到周五的时间安排
Y 表示能够学习编程,. 表示任务太多了,没有时间学习
输出描述
第一行表示,学习编程人数最多一天的人数
第二行表示,那一天小星和小伙们能够学习编程的人数最多,如果有多天,请按周一到周五的顺序输出,并用逗号分隔(不带空格)。
用例输入
5
YY..Y
.YY.Y
.Y.Y.
.YY.Y
Y...Y
用例输出
4
2,5
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n,x;
cin>>n;
int b[n],c[n];
for(int i=0;i<n;i++){
b[i]=0;
}
for(int i=0;i<n;i++){
c[i]=0;
}
char a[n];
for(int j=0;j<n;j++){
for(int i=0;i<4;i++){
cin>>a[i];
if(a[i]=='Y'){
b[i]=b[i]+1;
c[i]=c[i]+1;
}
}
}
for(int i = 0; i < n; i++)
{
for(int j = i+1; j < n+1; j++)
{
if(b[i]<b[j])
{
int temp=0;
temp = b[i];
b[i] = b[j];
b[j] = temp;
}
}
}
x=b[0];
cout<<x<<endl;
for(int i=0;i<4;i++){
if(c[i]==x){
cout<<i+1<<',';
}
}
cout<<'5';
return 0;
}
请问我的代码缺少什么
倒数第三个for之前是不是多了个}
用到的思想—贪心法
博主用到的环境:Win7, CodeBlocks等。
问题分析:
给定学习编程人数和每个人的周一到周五时间安排,要求输出学习编程人数最多一天的人数和该天能够学习编程的人数最多的一天。
代码问题:
参考代码未给出问题代码。
解决方案:
在代码的起始部分,定义一个学生类,用来记录每个学生的周一到周五的时间安排和该学生是否有学习时间。
class student{
public:
int time[5]; // 记录每天时间安排
int availability = 0; // 如果有学习时间,availability = 1,否则 =0
};
输入首先包括一个 n(1<=n<=100)表示学习编程的人数。然后包括 n 行数据,每行包括 5 个整数,表示对应学生周一到周五的时间安排。
int n; // 学习编程的人数
cin >> n;
vector<student> s(n);
for(int i = 0; i < n; i++){
for(int j = 0; j < 5; j++){
cin >> s[i].time[j];
if(s[i].time[j] != 0){ // 有空余时间
s[i].availability = 1; // 标记
}
}
}
vector<int> countDay(5, 0); // 统计每天的人数
vector<int> countAvailable(5, 0); // 统计能够学习编程的人数
for(int i = 0; i < n; i++){
for(int j = 0; j < 5; j++){
if(s[i].availability == 1){ // 学生有空余时间
countDay[j]++;
countAvailable[j] += 1;
}
}
}
int maxCount = 0, maxAvailable = 0;
for(int i = 0; i < 5; i++){
if(countDay[i] >= maxCount){
maxCount = countDay[i];
}
if(countAvailable[i] >= maxAvailable){
maxAvailable = countAvailable[i];
}
}
cout << maxCount << " " << maxAvailable << endl;
完整代码:
#include <iostream>
#include <vector>
using namespace std;
class student{
public:
int time[5]; // 记录每天时间安排
int availability = 0; // 如果有学习时间,availability = 1,否则 =0
};
int main(){
int n; // 学习编程的人数
cin >> n;
vector<student> s(n);
for(int i = 0; i < n; i++){
for(int j = 0; j < 5; j++){
cin >> s[i].time[j];
if(s[i].time[j] != 0){ // 有空余时间
s[i].availability = 1; // 标记
}
}
}
vector<int> countDay(5, 0); // 统计每天的人数
vector<int> countAvailable(5, 0); // 统计能够学习编程的人数
for(int i = 0; i < n; i++){
for(int j = 0; j < 5; j++){
if(s[i].availability == 1){ // 学生有空余时间
countDay[j]++;
countAvailable[j] += 1;
}
}
}
int maxCount = 0, maxAvailable = 0;
for(int i = 0; i < 5; i++){
if(countDay[i] >= maxCount){
maxCount = countDay[i];
}
if(countAvailable[i] >= maxAvailable){
maxAvailable = countAvailable[i];
}
}
cout << maxCount << " " << maxAvailable << endl;
return 0;
}