简单算术
Description
计算数列1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + …的前n项之和。
Input
输入有多组数据
输入一个正整数n。
Output
输出数列前n项的和。输出保留5位小数。
Samples
点击查看代码
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
int main() {
int n=0;
while (cin >> n) {
double sum = 0.0;
int sign = 1;
for (int i = 0; i < n; i++) {
double term = 1.0 / (2 * i + 1);
sum += sign * term;
sign *= -1;
}
cout << fixed << setprecision(5) << sum << endl;
}
return 0;
}
同班同学
Description
zhengling知道很多生活小常识,比如如果我们是一个班的,那么我们手机号前面的几位数字一定是相同的,并且我们的电话号码长度是一样的。
Input
输入N,表示有N个同学,接下来输入N行字符串表示每个同学的手机号。其中N<30,所有手机号码数据长度小于30。
Output
假设所有N同学都是一个班的,请输出他们的手机号前面到底有多少位是相同的。
Samples
点击查看代码
#include <iostream>
#include <string>
using namespace std;
int main() {
int n=0,m=0;
string phoneNumber[31];
cin >> n;
for (int i = 0; i < n; i++) {
cin >> phoneNumber[i];
}
int commonPrefix = 0;
bool stop = false;
while (!stop) {
char currentDigit = phoneNumber[0][commonPrefix];//纵向比较
for (int i = 1; i < n; i++) {
if (phoneNumber[i][commonPrefix] != currentDigit) {
stop = true;
break;
}
}
if (!stop) {
commonPrefix++;
}
}
cout << commonPrefix << endl;
return 0;
}
花雕恋
Description
我爱睡觉觉群里的花和雕很爱聊天。但是他们每天固定的上线时间并不同。给出他们每天固定的在线时间段,请问一天中他们能聊几个小时。
Input
第一行输入一个T,代表有T组测试数据。
每组测试数据输入n(n代表花花在线的区间个数),m(代表雕在线的区间个数)
接下来n行输入区间[a,b] 代表花花的在线区间.接下来m行输入区间[c,d]代表雕的在线区间.时间范围为(0-23)。
注意:是闭区间,so,比如10-13,指花花10,11,12,13四个小时都在线
Output
这一天他们可以聊天的总时间。
Samples
<h2>Hint</h2>
<p>
注意输入的时段可能会重合,比如10 13,10 12
</p>
点击查看代码
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int T;
std::cin >> T;
while (T--) {
int n, m;
std::cin >> n >> m;
int flower_intervals[50][2];
int sculpture_intervals[50][2];
for (int i = 0; i < n; ++i) {
cin >> flower_intervals[i][0] >> flower_intervals[i][1];
}
for (int i = 0; i < m; ++i) {
cin >> sculpture_intervals[i][0] >> sculpture_intervals[i][1];
}
int total_time = 0;
int time[24] = { 0 };
for (int i = 0; i < n; ++i) {
for (int j = flower_intervals[i][0]; j <= flower_intervals[i][1]; ++j) {
time[j] = 1;
}
}
for (int i = 0; i < m; ++i) {
for (int j = sculpture_intervals[i][0]; j <= sculpture_intervals[i][1]; ++j) {
if (time[j] == 1) {
total_time++;
}
}
}
cout << total_time << endl;
}
return 0;
}
超简版贪吃蛇
Description
据说软工的同学们短学期写贪吃蛇写得很欢乐,为了将这份快乐延续下去,故有了这道超级简化版的贪吃蛇题目。
本题中,地图为一个$n*m$的网格,坐标原点在左上角,$x$轴方向向下,$y$轴方向向右。
贪吃蛇初始位置为$(x,y)$,运动方向向右,长度永远为一个格子。
初始时间为$0$,从第$1$秒开始,贪吃蛇每秒会向当前的方向运动一格。
在运动过程中,玩家会随时改变贪吃蛇的方向。
例如,玩家如果在第$0$秒按下了上键,那么在第$1$秒贪吃蛇的位置就是$(x-1,y)$。若玩家在第$0$秒不操作,那么贪吃蛇默认向右,第$1$秒的位置为$(x,y+1)$。
另外,地图的边界是可以穿越的,如果贪吃蛇在$(0,y)$往上走了一格,它就会出现在$(n-1,y)$,其他边界类似。
现在,给你玩家的操作序列,请你输出第$t$秒时,贪吃蛇所在的位置。
Input
有多组测试数据,对于每组测试数据:
首先$5$个整数$n,m,x,y,t(x < n \leq 100,y < m \leq 100,t \leq 10000)$表示地图大小、初始位置和最后的时间。
然后一个$q(q \leq 100)$表示用户操作次数。
接下来$q$行,每行两个整数$dir,time(0 \leq time < 10000)$分别表示方向和用户按下按键的时间。
其中,$dir = 0$表示向上,$1$向下,$2$向左,$3$向右,不会有其他的值。
$time$表示用户进行本次操作所处的时间,例如$time = 0$就表示用户在第$0$秒进行了这次操作,注意$time$有可能大于$t$。
输入保证$time$是递增的。
输入$5$个$0$表示程序结束。
Output
对于每组样例,输出两个整数$x, y$,表示贪吃蛇在第$t$秒的坐标。
Samples
点击查看代码
#include <iostream>
using namespace std;
int main() {
int n, m, x, y, t;
while (cin >> n >> m >> x >> y >> t, n || m || x || y || t) {
int dir[10001][2] = { 0 };
dir[0][0] = 3; // 初始方向向右
int q;
cin >> q;
for (int i = 0; i < q; i++) {
int d, time;
cin >> d >> time;
dir[time][0] = d;
dir[time][1] = 1; // 标记这个时间点改变了方向
}
for (int i = 1; i <= t; i++) {
if (!dir[i][1]) { // 如果这个时间点没有改变方向
dir[i][0] = dir[i - 1][0]; // 方向和上一秒保持一致
}
}
for (int i = 0; i < t; i++) {
switch (dir[i][0]) {
case 0:
x--;
break;
case 1:
x++;
break;
case 2:
y--;
break;
case 3:
y++;
break;
}
if (x < 0)
x = n - 1;
if (x >= n)
x = 0;
if (y < 0)
y = m - 1;
if (y >= m)
y = 0;
}
cout << x << " " << y << endl;
}
return 0;
}