题目:201703-1—分蛋糕
#include <iostream>
using namespace std;
int main()
{
int n, k;
int cake[1001] = {0};
cin>>n>>k;
int count = 0, sum = 0;
for(int i=0; i<n; i++)
{
cin>>cake[i];
if(cake[i]>=k){count++; sum = 0;}
else{
sum+=cake[i];
if(sum>=k){
count++;
sum=0;
}
}
}
if(sum!=0) count++;
cout <<count<< endl;
return 0;
}
注意:记得考虑最后一个同学没有分到k的蛋糕的情况。
题目:201703-2—学生排队
#include <iostream>
using namespace std;
int main()
{
int n, m;
int stu[1010] = {0};
int pos[1010] = {0};
cin>>n>>m;
for(int i=1; i<=n; i++){
stu[i]=i;
pos[i]=i;
}
while(m--){
int num, mov;
cin>>num>>mov;
if(mov>0){
for(int j=1; j<=mov; j++){
stu[pos[num]+j-1]=stu[pos[num]+j];
pos[stu[pos[num]+j-1]]--;
}
stu[pos[num]+mov] = num;
}
else if(mov<0){
int mov1 = -mov; //易错点
for(int j=1; j<=mov1; j++){
stu[pos[num]-j+1]=stu[pos[num]-j];
pos[stu[pos[num]-j+1]]++;
}
stu[pos[num]+mov] = num;
}
pos[num]+=mov;
}
for(int i=1; i<=n; i++){
cout<<stu[i]<<((i==n)?'\n':' ');
}
return 0;
}
说明:用了两个数组,stu数组相当于队伍,存放从前往后的学生的学号,pos数组的下标对应学号,存放对应学号学生的位置,利用pos数组中存放的位置可以很容易找到该学号学生在stu数组中的位置,不用遍历查找。
注意:
1. ((i==n)?’\n’:’ ‘)一定要用括号括起来,否则输出数组的内容不对;
2. 在易错点那里我修改了mov的值(mov=-mov),导致最后位置增加mov在mov为负的时候不正确。建议还是多建几个变量,不要轻易修改输入数据的值。