1. (程序题)周末舞会
nefu1632
假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。规定每个舞曲只能有一对跳舞者。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求写一个程序,模拟上述舞伴配对问题。
Input
第 1 行两个正整数,表示男士人数 m 和女士人数 n,1≤m,n≤1000;
第 2 行一个正整数,表示舞曲的数目 k,k≤1000。
Output
共 k 行,每行两个数,之间用一个空格隔开,表示配对舞伴的序号,男士在前,女士在后。
Sample Input
2 4
6
Sample Output
1 1
2 2
1 3
2 4
1 1
2 2
#include<iostream>
#include<queue>
using namespace std;
int main()
{
int n, m; //表示男女人数
int k = 0; //表示舞曲数目
while (cin >> n >> m >> k)
{
queue<int>v;
queue<int>u;
for (int i = 1; i <= n; i++)
{
v.push(i);
}
for (int i = 1; i <= m; i++)
{
u.push(i);
}
for (int i = 1; i <= k; i++)
{
cout << v.front() << " " << u.front()<<endl;
v.push(v.front());
u.push(u.front());
v.pop();
u.pop();
}
}
return 0;
}
2. Description
n个小朋友们坐成一个圆圈,编号分别为1,2,3…n;第1个小朋友从1开始报数,报到m的小朋友离开座位;然后下一个小朋友从1接着报数;直到剩下最后一个小朋友为止;
Input
输入2个数字n和m;(1<=n,m<=1000)
Output
输出最后一个小朋友的编号!
Sample Input
10 5
Sample Output
3
#include<iostream>
#include<queue>
using namespace std;
int main()
{
int n, m;
while (cin >> n >> m)
{
queue<int>v;
for (int i = 1; i <= n; i++)
{
v.push(i); //读入小朋友编号
}
int count = 1;
while (v.size() != 1)
{
if (count == m)
{
v.pop();
count = 0;
}
else
{
v.push(v.front());
v.pop();
}
count++;
}
cout << v.front() << endl;
}
}
3. Description
林大食堂非常拥挤,得排队买饭,陈老师也是一样的!
有n个人在一个卖饭窗口前排队买饭,假如每个人买饭的时间为t,请编程找出一种这n个人排队的顺序,使得这n个人的平均等待时间最小。
Input
第一行一个n(1<=n<=1000),
第2行分别表示每人的接水时间t1,t2,t3,…tn,1<=t[i]<=10000;
Output
第1行为排队顺序;
第2行为平均等待时间(结果保留2位小数);
Sample Input
10
56 12 1 99 1000 234 33 55 99 812
Sample Output
3 2 7 8 1 4 9 6 10 5
291.90
#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
struct sa
{
int time;
int id;
};
bool operator < (const sa& a, const sa& b)
{
if (a.time != b.time)
return a.time > b.time;
else
return a.id > b.id;
}
priority_queue<sa>vis;
int main()
{
int n, x;
double sum = 0.0;
while (cin >> n)
{
for (int i = 1; i <= n; i++)
{
cin >> x;
vis.push({ x,i });
}
struct sa tmp;
for (int i = 1; i <= n; i++)
{
tmp = vis.top();
if (i != n)
cout << tmp.id << " ";
else
cout << tmp.id << endl;
sum += (n - i) * tmp.time; //计算总和
vis.pop();
}
printf("%.2lf\n", sum / n);
}
return 0;
}