寒假到了,按照学院寒假值班安排,计算机卓越201班60个同学中需要安排若干个学生轮流值班(每生每次值班1天),值班时间是2021年1月1号--31号,从1月1号开始值班,轮流值班次序由学院随机指定。现要求做一个寒假值班表,能随时查询某某同学几号值班。相信你能帮学院设解决这个问题!
输入
测试数据有多组,首行是一个正整数n,表示测试数据组数。
每组测试数据有多行,其中第1行是正整数m,表示本次有m名学生轮流值班,随后m行是m名轮流值班学生姓名;第m+2行是一个值班学生姓名,表示从该生开始循环轮流值班,即该生1号值班;第m+3行输入一个学生姓名,表示待查找该名学生的值班时间。
输入示例:
1 // 第一行1 表示测试数据有一组
4 // 第1组测试数据: 第1行的正整数 4 表示有4名学生 按此顺序轮流值班。
zhangsan // 第2行 --- 第 m+1行 依次表示 轮流值班学生姓名
wangwu
lisi
zhaohu // 第m+1行
wangwu // 第m+2行是值班学生姓名,表示从该生开始循环轮流值班,即该生1号值班。
lisi // 第m+3行输入一个学生姓名,表示待查找该名学生的值班时间。
输出
输出有n行,每行有若干个正整数,表示该生的值班时间,每个数据占3个字符,左对齐(参考格式“%-3d”),如输出样例所示。若查无此人值班则输出“-1”。
难度
中等
输入示例
2
4
zhangsan
wangwu
lisi
zhaohu
wangwu
lisi
5
pingduoduo
zhangsan
lisi
zhaohu
wangwu
zhaohu
lisi
输出示例
2 6 10 14 18 22 26 30
5 10 15 20 25 30
#include <iostream>
#include <cstring>
#include<stdio.h>
using namespace std;
int main()
{
char s[100][20],h[60],g[60];
int a,b,c,d,i,n,k;
cin>>n;
while(n--)
{
cin>>a;
for(i=0;i<a;i++)
{
cin>>s[i];
}
cin>>h>>g;
for(i=0;i<a;i++)
{
if(strcmp(s[i],h)==0)
k=i;
}
d=1;
c=0;
while(d<=31)
{
k=k%a;
if(strcmp(s[k],g)==0)
{
printf("%-3d",d);
c=1;
}
k++;
d++;
}
if(c==0)
cout<<-1;
cout<<endl;
}
}
这里的两个代码,第二个没有用第一个的取模方法,建议还是改用取模的,因为这才是最常用的方法,更为正规
#include<iostream>
#include<string.h>
using namespace std;
struct student
{
char name[101];
}stu[101];
int main()
{
int m, i,k,n,j,date,b=0;
char begin[101],cha[101];
cin >> n;
for (k= 0; k< n; k++)
{
date=0;
cin >> m;
for (j = 0; j < m; j++)
cin >> stu[j].name;
cin>>begin; //从该学生开始轮流
cin>>cha; //要查找的学生
for(i=0;i<m;i++)
{
if(strcmp(stu[i].name,begin)==0)
{
b=1;
break;
}
}
if(b==0)
{
cout<<-1<<endl;
return 0;
}
for(;i<m;i++)
{
date++;
if(strcmp(cha,stu[i].name)==0)
cout<<date<<" ";
if(date==31)
break;
if(i==m-1)
i=-1;
}
cout<<endl;
}
return 0;
}