01 贪吃蛇长度 数数 -> 输入+字符判断+计数
标题:贪吃蛇长度
+-------------------------------------------------+
| |
| H###### #### |
| # # # |
| # # # |
| # #### # # |
| # # # # # |
| ######@### # # |
| # #### # # |
| # # # # # |
| ####@#######@### # # |
| # # # # # |
| T ##### # # # ## |
| # # ### ### ## |
| ################ # # #### |
| # # # # |
| ############## #######@########## |
| # ### |
| ########################### |
+-------------------------------------------------+
小明在爷爷的私人收藏馆里找到一台老式电脑。居然没有图形界面,只能用控制台编程。
经过小明的一阵摸索,神奇地设计出了控制台上的贪食蛇游戏。
如上图,是游戏时画面截图。
其中,H表示蛇头,T表示蛇尾。#表示蛇的身体,@表示身体交叉重叠的地方。
你能说出现在的贪吃蛇长度是多少吗?
其实,只要数出#的数目算1,数出@的数目,算2,再加上头尾各算1就计算好了。
人工数一下?太累眼睛了,聪明的你为什么不让计算机帮忙呢?
本题的要求就是: 请填写上图中贪食蛇的长度是多少?
注意:需要提交的是一个整数,不要添加任何多余内容(比如说明或注释)
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {
int ans=0;
for (int i = 0; i < 20; ++i) {
for (int j = 0; j < 51; ++j) {
char c;
scanf("%c",&c);//璇诲叆瀛楃锛岃繘琛岀粺璁?
if(c=='#')ans++;
if(c=='@')ans+=2;
}
}
printf("%d",ans+2);
return 0;
}
输出结果:190
02 兴趣小组 文件读取+set的运用
标题:兴趣小组
为丰富同学们的业余文化生活,某高校学生会创办了3个兴趣小组
(以下称A组,B组,C组)。
每个小组的学生名单分别在【A.txt】,【B.txt】和【C.txt】中。
每个文件中存储的是学生的学号。
由于工作需要,我们现在想知道:
既参加了A组,又参加了B组,但是没有参加C组的同学一共有多少人?
请你统计该数字并通过浏览器提交答案。
注意:答案是一个整数,不要提交任何多余的内容。
笨笨有话说:
哇塞!数字好多啊!一眼望过去就能发现相同的,好像没什么指望。
不过,可以排序啊,要是每个文件都是有序的,那就好多了。
歪歪有话说:
排什么序啊,这么几行数字对计算机不是太轻松了吗?
我看着需求怎么和中学学过的集合很像啊…
#include <set>
#include <iostream>
#include <fstream>
using namespace std;
set<string> A;
set<string> B;
set<string> C;
int ans;
void read(set<string> &A,char *path) {
ifstream fin;
fin.open(path, ios_base::in);
while (!fin.eof()) {
//eof==>end of file
string s;
fin >> s;
if(s.length()>0)
A.insert(s);
}
fin.close();
}
int main(int argc, const char *argv[]) {
read(A,"/Users/zhengwei/CLionProjects/lanqiao2018/2017_C_C/A.txt");
read(B,"/Users/zhengwei/CLionProjects/lanqiao2018/2017_C_C/B.txt");
read(C,"/Users/zhengwei/CLionProjects/lanqiao2018/2017_C_C/C.txt");
cout << A.size() << endl;
cout << B.size() << endl;
cout << C.size() << endl;
// 遍历集合A
set<string>::iterator iterA = A.begin();
while (iterA != A.end()) {
if (B.find(*iterA) != B.end() && C.find(*iterA) == C.end())//B中有但C中没有,计数+1
ans++;
iterA++;
}
cout << ans << endl;
return 0;
}
03 算式 900 全排列
标题:算式900
小明的作业本上有道思考题:
看下面的算式:
(□□□□-□□□□)*□□=900
其中的小方块代表0~9
的数字,这10个方块刚好包含了0~9
中的所有数字。
注意:0不能作为某个数字的首位。
小明经过几天的努力,终于做出了答案!如下:
(5012-4987)*36=900
用计算机搜索后,发现还有另外一个解,本题的任务就是:请你算出这另外的一个解。
注意:提交的格式需要与示例严格一致;
括号及运算符号不要用中文输入法;
整个算式中不能包含空格。
注意:机器评卷,不要填写任何多余的内容,比如说明文字。
#include <iostream>
#include <algorithm> //next_permutation函数头文件
using namespace std;
int main(int argc, const char *argv[]) {
int a[] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
do {
if (a[0] == 0 || a[4] == 0 || a[8] == 0)continue;
int x1 = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3];
int x2 = a[4] * 1000 + a[5] * 100 + a[6] * 10 + a[7];
int x3 = a[8] * 10 + a[9];
if ((x1 - x2) * x3 == 900) {
printf("(%d%d%d%d-%d%d%d%d)*%d%d=900\n",
a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9]);
}
} while (next_permutation(a, a + 10));
return 0;
}
(5012-4987)*36=900
(6048-5973)*12=900
04 承压计算 二维数组的运用+计量的倍数扩大
标题:承压计算
X星球的高科技实验室中整齐地堆放着某批珍贵金属原料。
每块金属原料的外形、尺寸完全一致,但重量不同。
金属材料被严格地堆放成金字塔形。
7
5 8
7 8 8