16级C++第二次上机解题报告
来源:互联网 发布:网络bug是什么意思啊 编辑:程序博客网 时间:2024/06/15 03:07
A 自习室之神
时间限制:1000ms 内存限制:65536kb
通过率:125/179 (69.83%) 正确率:125/610 (20.49%)
题目描述
某位大神只要自习的时候,相邻座位有妹子,他就会拒绝在这个位置就坐。
新学期开始了,这位大神随意选择了一个时间进行穿越,走进了新主楼。他走进的这个教室只有一个小圆桌,圆桌周围均匀地摆着4个座位,编号1~4。给你这4个座位的状态,请你帮助判断他能否在这个教室里坐下。
输入
输入四个数,表示1~4号座位的状态。
0代表座位是空的,1代表座位上坐着男生,2代表座位上坐着女生。
输出
如果常朔荣可以坐下,输出"ConstSR is studying"
如果没有空座位,输出"ConstSR needs space"
如果有空座位但相邻位置有女生,输出"ConstSR hates girls"
输入样例1
0 0 1 0
输出样例1
ConstSR is studying
输入样例2
2 1 1 1
输出样例2
ConstSR needs space
输入样例3
0 2 2 0
输出样例3
ConstSR hates girls
考察知识点
条件判断语句的使用
解题思路
先判断是否有空座,只需判断是否有有数字0即可。
如果有空座,枚举空座,判断旁边是否有女生即可。
需要特别注意的是,这是一个圆桌,因此1号座位和4号座位是相邻的。
参考代码
#include<iostream>using namespace std;int main() { int a, b, c, d; cin >> a >> b >> c >> d; if (a != 0 && b != 0 && c != 0 && d != 0) cout << "ConstSR needs space"; else if (a == 0 && d != 2 && b != 2 || b == 0 && a != 2 && c != 2 || c == 0 && d != 2 && b != 2 || d == 0 && a != 2 && c != 2) cout << "ConstSR is studying"; else cout << "ConstSR hates girls";}
B 王助教猜数字
时间限制:1000ms 内存限制:65536kb
通过率:115/178 (64.61%) 正确率:115/826 (13.92%)
题目描述
王助教想要做一个猜数字游戏。首先规定一个要猜的数字,然后每猜一个数字,程序都会告诉他大了还是小了,最后如果王助教猜中了就胜利,没猜中就GG。
输入
n行数据,每行一个数x,均为整数。
1≤n≤100
−2^31≤x≤2^31−1
多组数据读入,每组数据中:
第一行为要猜的数字。
第二行以后为王助教猜的数字。
当王助教猜中后,开始读入下一组数据。
输出
若王助教猜的数比实际小则输出"less than actual number"
比实际大则输出"greater than actual number"
猜中则输出"you get the number {number}",其中{number}是要猜的数字。
输入样例
10
13
7
10
输出样例
greater than actual number
less than actual number
you get the number 10
考察知识点
条件判断语句的使用,读入语句返回值的判断
解题思路
- 先读入要猜的数,然后挨个读入猜的数,判断并输出。直到猜中或者读不到数据为止。
- 如果猜中,输出提示信息,读入下一个数作为要猜的数,然后挨个读入猜的数,直到再猜中或者读不到数据为止。
- 如果再猜中,继续执行步骤2。
参考代码
#include<iostream>using namespace std;int main() { int x, n; while (cin >> x) { while (cin >> n) { if (n > x) cout << "greater than actual number\n"; else if (n == x) { cout << "you get the number "<< x << "\n"; break; } else if (n < x) cout << "less than actual number\n"; } }}
C 王助教坐地铁
时间限制:1000ms 内存限制:65536kb
通过率:30/144 (20.83%) 正确率:30/636 (4.72%)
题目描述
王助教是个路痴,以至于每次坐地铁都会坐过站。于是他打算做一个程序来提醒自己下地铁。
王助教总是希望自己少走路,但是他也希望自己能尽早到达目的地。假设地铁的运行轨迹是直线,现在由你来写一个这样的程序吧。
地铁站编号为1~n。
输入
第一行为一个整数x,表示目标地点距王助教的路程(按地铁线路计算)。
第二行至第n行,每行一个整数Si,表示地铁走到下一站所走过的路程。
0≤x≤10000
0≤n≤1000000
1≤Si≤10000
输出
王助教应当在哪一站下地铁。
输入样例
100
15
90
10
输出样例
3
考察知识点
条件判断语句的使用,读入语句返回值的判断
解题思路
题意即:在所有站中,找到与目的地距离最近的一个站。
1.读入目的地的位置。此时已知位置信息的有起点站(编号为1的站)和目的地。用一个变量记录下起点站到目的地距离,此处设为minDist。
2.读入一个距离,得到了第二个站的位置信息,据此求出第二个站到目的地的距离,设为nowDist。将nowDist与minDist作对比,如果nowDist小于minDist,那么将nowDist作为新的minDist。
3.重复执行步骤2,直到读不到数据时,输出minDist对应的站的序号。
参考代码
#include <iostream>using namespace std;int x, n, s, sum, minDist, nowDist, ans;int main() { cin >> x; sum = 0; //当前站离起点的距离 n = 1;//当前站的序号 minDist = x; //当前所有站中,与目的地最近的距离 ans = 1;//当前所有站中,与目的地最近的站的序号 while (cin >> s) { n++; sum += s; nowDist = abs(sum - x); //当前站离目的地的距离 if (nowDist < minDist) {//如果当前站比之前的站都要近 minDist = nowDist; //更新minDist ans = n; } } cout << ans << "\n";}
三角形支架
时间限制: 1000 ms内存限制: 65536 kb
总通过人数: 110总提交人数: 159
题目描述
艺术创意中心要给即将到来的校庆嘉年华做一张大海报。由于这张海报实在是太大了,没这个尺寸的易拉宝。
于是创意中心决定自己设计一个支架。
假设这是一个实心均匀的三角形支架,但是如果它自己本身都放不稳,那就太糟糕了。
所以检查支架质量的任务就交给大家了。
底座不计质量。
像这种重心落在在底座外(落在顶点上不算)的,就会翻倒,本身是放不稳的。
输入
只有三个整数a,b,c分别为三角形的三个边,
a,b,c在int范围内。
输出
三行数据。每行输出分别以a,b,c为底座,能否制作出稳定的三角形支架。若能则分为两种情况:
重心落在底座内部输出"stable";
重心落在底座的顶点上输出"almost stable";
否则输出"no way"。(不包含双引号)
输入样例1
2 3 4
输出样例1
2:stable
3:stable
4:stable
输入样例2
2 11 10
输出样例2
2:no way
11:stable
10:stable
hint
三角形已知三点重心公式:
x=(x1+x2+x3)/3
y=(y1+y2+y3)/3
考察知识点
计算几何,三角形组成判断,浮点精度问题,整数的表示范围
解题思路
这道题首先的思路是建系,算出交点以后,套入重心公式,然后判断是否落在底边上。
同时需要注意的是题目中只是要求设计支架,不一定做出来(可能无法构成三角形)
由于浮点数精度问题,一种办法是使用long double控制精度,然后将近似相等的绝对值判断中,精度调高来解决问题。
另外一种办法是放弃浮点数,改用乘法,使用整数来解决问题。
这里3a^2可以超过long long范围,需要使用unsigned long long.
参考代码
#include <cstdio>long long abs(long long a) { return a > 0 ? a : -a;}void judge(long long a, long long b, long long c) { if (a > 0 and b > 0 and c > 0 and c < a + b and c > abs(a - b)) { long long gx3a2 = abs(c * c - b * b); unsigned long long right = 3 * a * a; if (gx3a2 < right)//这里,线段的等效表示范围为[-3a^2,3a^2],重心点等效表示为c^2-b^2。 printf("stable\n"); else if (gx3a2 == right) printf("almost stable\n"); else printf("no way\n"); } else printf("no way\n");}int main() { int a, b, c; scanf("%d%d%d", &a, &b, &c); printf("%d:", a); judge(a, b, c); printf("%d:", b); judge(b, c, a); printf("%d:", c); judge(c, a, b);}
- 16级C++第二次上机解题报告
- 15级算法第二次上机解题报告
- 第二次C上机报告
- 第二次C程序设计上机报告
- 第二次C程序设计上机报告
- 第二次 C程序设计上机报告
- 第二次C程序设计上机报告
- 第二次C程序设计上机报告
- 第二次c程序设计上机报告
- 第二次C程序设计上机报告
- 第二次C程序设计上机报告
- 第二次C程序设计上机报告
- 第二次C程序设计上机报告
- 第二次C语言上机报告
- 第二次c程序上机报告
- 第二次c程序设计上机报告
- 第二次C程序上机报告
- 第二次C程序设计上机报告
- POC注意事项
- const 和 #define区别
- PVID - 基于端口的VID
- swift guard关键字使用
- C++中引用(&)的用法和应用实例
- 16级C++第二次上机解题报告
- C++中struct和class的区别
- java常见错误随笔之——框架
- [LeetCode]--374. Guess Number Higher or Lower
- 【转载】C#窗体热键与全局热键设置
- springmvc的入门使用
- JavaMail开发的几个问题
- 杭电oj编码2012
- hdu 1251 统计难题 Trie树