目录

数学

1084 用筛法求n以内的素数

1446 核桃的数量

1464 分解质因数

枚举

1022 筛选N以内的素数

1141 百钱百鸡问题

1199 哥德巴赫曾猜测

1259 送分题素数

递归

1004 母牛的故事

1463 Sine之舞

1508 和最大子序列

1575 递归倒置字符数组

1544 特殊的质数肋骨

动态规划

1557 聪明的旅行家

1610 传球游戏(错误8)

1633 数的统计

进制

1572 进制转换(答案错误27)

1934 十进制数转八进制数

2619 二进制问题(时间超限27)

2080 十六进制转八进制

2082 十六进制转十进制

2083 十进制转十六进制 (答案错误45)

2218 二进制数数(答案错误17)

2248 输出二进制表示

模拟

1429 兰顿蚂蚁(答案错误25)

1480 模拟计算器(答案错误82)

1481 剪刀石头布(答案错误80)


数学

1084 用筛法求n以内的素数

题目描述

用筛法求之N内的素数。

输入

N

输出

0~N的素数

样例输入复制

100

样例输出复制

2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97

题目分析:

筛法解释

给定一列数组,假设是1~25:

第一步

列出2以后的所有序列:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

第二步

标出序列中的第一个素数,也就是2,序列变成:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

将剩下序列中,划掉2的倍数(用删除线标出),序列变成:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

如果现在这个序列中最大数小于最后一个标出的素数的平方,那么剩下的序列中所有的数都是素数,否则回到第二步。
本例中,因为25大于2的平方,我们返回第二步:
剩下的序列中第一个素数是3,将主序列中3的倍数划出(删除线),主序列变成:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
我们得到的素数有:2,3
25仍然大于3的平方,所以我们还要返回第二步:
现在序列中第一个素数是5,同样将序列中5的倍数划出,主序列成了:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
我们得到的素数有:2 3 5 11 13 17 23 。
因为25等于5的平方,跳出循环.

在本题中,可根据数值来确定删去倍数;

若n=100,则用筛法筛到11

若n=10,则用筛法筛到4

代码运算:

#include<iostream>
using namespace std;int main()
{int n;cin>>n;for(int i=2;i<=n;i++){if(i==2||i==3||i==5||i==7||i==11||i%2!=0&&i%3!=0&&i%5!=0&&i%7!=0&&i%11!=0){cout<<i<<endl;}}return 0;
}

运行结果:

备注:这种方法在n较小时可用,较大时就麻烦了

1446 核桃的数量

题目描述

小张是软件项目经理,他带领3个开发组。工期紧,今天都在加班呢。为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑)。他的要求是:
1.  各组的核桃数量必须相同
2.  各组内必须能平分核桃(当然是不能打碎的)
3.  尽量提供满足1,2条件的最小数量(节约闹革命嘛)

输入

输入包含三个正整数a,  b,  c,表示每个组正在加班的人数,用空格分开(a,b,c< 30)

输出

输出一个正整数,表示每袋核桃的数量。

样例输入复制

2 4 5

样例输出复制

20

题目分析:

不用理这么多,要想满足题目要求,只需要核桃的数量同时满足三个科室整除即可

代码运算:

#include<iostream>
using namespace std;int main()
{int a,b,c;cin>>a>>b>>c;for(int i=1;;i++){if(i%a==0&&i%b==0&&i%c==0){cout<<i;break;}}return 0;
}

运行结果: 

1464 分解质因数

题目描述

求出区间[a,b]中所有整数的质因数分解。

提示

先筛出所有素数,然后再分解。

输入

输入两个整数a,b。

2< =a< =b< =10000

输出

每行输出一个数的分解,形如k=a1*a2*a3...(a1< =a2< =a3...,k也是从小到大的)(具体可看样例)

样例输入复制

3 10

样例输出复制

3=3
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5

分析:

先判断是否是素数,再进行质因数分解

if (k <= 2) return false;else{for (int i = 2; i * i <= k; i++)  //考虑9=3*3的情况{if (k % i == 0)return false;}return true;}

代码:

#include<iostream>
using namespace std;
bool Zhishu(int k)
{if (k <= 2) return false;else{for (int i = 2; i * i <= k; i++){if (k % i == 0)return false;}return true;}
}
void Fenjie(int k)
{if (Zhishu(k)){cout << k << "=" << k;}else{cout << k << "=";for (int i = 2; i <= k; i++){if (k % i == 0){cout << i;k /= i;if (k != 1)cout << "*";elsebreak;i--;  /如/8=2*2*2的情况}}}
}
int main()
{int a, b;cin >> a >> b;for (int i = a; i <= b; i++){Fenjie(i);cout << endl;}return 0;
}

运行结果:

枚举

1022 筛选N以内的素数

题目描述

用简单素数筛选法求N以内的素数。

输入

N

输出

2~N的素数

样例输入复制

100

样例输出复制

2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97

代码:

#include<iostream>
#include<cmath>
using namespace std;
bool Is_sushu(int n)
{for (int i = 2; i <= floor(sqrt(n) + 0.5); i++){if (n % i == 0)return 0;}return n;
}
int main()
{int n;cin >> n;for (int i =2; i <=n; i++){if (Is_sushu(i) != 0){cout << i <<endl;}}return 0;
}

运行结果:

1141 百钱百鸡问题

题目描述

中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?

输入

无输入

输出

给出所有的解,每组解占一行
解的顺序:按“字典序”排列,即公鸡数少的在前;公鸡数相同,母鸡数少的在前
格式:
cock=%d,hen=%d,chicken=%d\n

样例输入复制

样例输出复制

cock=0,hen=25,chicken=75
cock=4,hen=18,chicken=78
cock=8,hen=11,chicken=81
cock=12,hen=4,chicken=84

题目分析:

这道题实际上考察for循环嵌套

代码:

#include<iostream>
using namespace std;
int main()
{for(int x=0;x<100;x++){for(int y=0;y<100;y++){int z=200-8*x-5*y;  //两个式子的和if(z>=0&&z<100&&x+y+z==100){cout<<"cock="<<x<<","<<"hen="<<y<<","<<"chicken="<<z<<endl;}}}return 0;
}

运行结果:

1199 哥德巴赫曾猜测

题目描述

德国数学家哥德巴赫曾猜测:任何大于6的偶数都可以分解成两个素数(素数对)的和。但有些偶数可以分解成多种素数对的和,如: 10=3+7,10=5+5,即10可以分解成两种不同的素数对

输入

输入任意的>6的正偶数(<32767)

输出

试求给出的偶数可以分解成多少种不同的素数对(注: A+B与B+A认为是相同素数对)

样例输入复制

1234

样例输出复制

25

题目分析:

在for循环里面判断是否为素数即可。在主函数外再定义并实现一个判断素数函数

代码:

#include<iostream>
#include<cmath>
using namespace std;bool Issushu(int k)
{for (int i = 2; i <= floor(sqrt(k) + 0.5); i++){if (k % i == 0){return 0;}}return 1;
}
int main()
{int n;cin >> n;int ans = 0;for (int i = 2; i <= n / 2; i++){if (Issushu(i) == 1 && Issushu(n - i) == 1){++ans;}}cout << ans << endl;return 0;
}

运行结果:

1259 送分题素数

题目描述

输出100->200之间的素数的个数,以及所有的素数。

输入

输出

100->200之间的素数的个数,以及所有的素数。

样例输入复制

样例输出复制

21
101 103 ... 197 199

题目分析:

1.关于素数的判定,即把要判断的数跟他的平方根进行相余

代码:

#include<iostream>
#include<cmath>
using namespace std;
bool Is_sushu(int n)
{for (int i = 2; i <= floor(sqrt(n) + 0.5); i++){if (n % i == 0)return 0;}return n;
}
int main()
{int count = 0;for (int i = 100; i <= 200; i++){if (Is_sushu(i) != 0){count++;}}cout << count << endl;for (int i = 100; i <= 200; i++){if (Is_sushu(i) != 0){cout << i << "\t";}}cout << endl;return 0;
}

运行结果:

递归

1004 母牛的故事

题目描述

有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?

输入

输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。

输出

对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。

样例输入复制

2
4
5
0

样例输出复制

2
4
6

题目分析:

递归题最重要要找到相互之间存在的关系,

我们先列出一个表格,把每一年对应的母牛数量写出来。

第 n年: 1 2 3 4 5 6 7 8
f[n] 头牛: 1 2 3 4 6 9 13 19

先看第 4 年,对应有 4 头母牛,4 = 3+1;
再看第 5 年,对应有 6 头母牛,6 = 4+2;
最后看第 6 年,对应有 9 头母牛,9 = 6+3;

没错,是有规律的,该年母牛的数量就是一年前的数量再加上三年前的数量,

用公式表示就是 f[n] = f[n-1] + f[n-3]

代码:

#include<iostream>
using namespace std;
int main()
{int n;int f[55] = { 0,1,2,3 };for (int i = 4; i < 55; i++)f[i] = f[i - 1] + f[i - 3];while (cin >> n && n != 0){cout << f[n] << endl;}return 0;
}

运行结果:

1463 Sine之舞

题目描述

最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数基本功。所以他准备和奶牛们做一个“Sine之舞”的游戏,寓教于乐,提高奶牛们的计算能力。
不妨设
An=sin(1–sin(2+sin(3–sin(4+...sin(n))...)
Sn=(...(A1+n)A2+n-1)A3+...+2)An+1
FJ想让奶牛们计算Sn的值,请你帮助FJ打印出Sn的完整表达式,以方便奶牛们做题。

输入

仅有一个数:N<201。

输出

请输出相应的表达式Sn,以一个换行符结束。输出中不得含有多余的空格或换行、回车符。

样例输入复制

3

样例输出复制

((sin(1)+3)sin(1-sin(2))+2)sin(1-sin(2+sin(3)))+1

题目解析:

这道题的输出看起来复杂,其实不过就是for循环和递归的不断输出而成

代码:

//An = sin(1–sin(2 + sin(3–sin(4 + ...sin(n))...)
//  Sn = (...(A1 + n)A2 + n - 1)A3 + ... + 2)An + 1
//打印出Sn的完整表达式
//  样例输入
//  3
//  样例输出
//  ((sin(1) + 3)sin(1 - sin(2)) + 2)sin(1 - sin(2 + sin(3))) + 1
//1.输入样例
//2.根据式子特点进行循环
#include<iostream>
using namespace std;
void An(int n)
{for (int i = 1; i <= n; i++){cout << "sin(" << i;if (i == n) break;if (i % 2){cout << "-";}else{cout << "+";}}while (n--){cout << ")";}
}
int main()
{int n;cin >> n;for (int i = 2; i <= n; i++){cout << "(";}for (int i = 1; i <= n; i++){An(i);cout << "+" << n - i + 1;if (n - i + 1 != 1){cout << ")";}elsebreak;}return 0;
}

运行结果:

1508 和最大子序列

题目描述

对于一个给定的长度为N的整数序列A,它的“子序列”的定义是:A中非空的一段连续的元素(整数)。你要完成的任务是,在所有可能的子序列中,找到一个子序列,该子序列中所有元素的和是最大的(跟其他所有子序列相比)。程序要求你输出这个最大值。

输入

输入文件的第一行包含一个整数N,第二行包含N个整数,表示A。 
其中 
1  < =  N  < =  100000 
-10000  < =  A[i]  < =  10000

输出

输出仅包含一个整数,表示你算出的答案。

样例输入复制

5
3 -2 3 -5 4

样例输出复制

4

代码:

#include<iostream>
using namespace std;
int main()
{int n,ch,sum=0,max=-10086;cin >> n;int* a = new int[n];for (int i = 0; i < n; i++){cin >> ch;a[i] = ch;sum += a[i];if (max < sum){max = sum;}if (sum < 0)  //对于当前这个数,加入总和后若一旦使sum为负,立即置0处理,也就是从下一个数开始重新对sum计数求和,这样就在保留了sum为负之前的最大max的同时又可以不影响接下来可能超过前面max的max数值所可能的交换。{sum = 0;}}cout << max << endl;return 0;
}

运行结果:

1575 递归倒置字符数组

题目描述

完成一个递归程序,倒置字符数组。并打印实现过程
递归逻辑为:
当字符长度等于1时,直接返回
否则,调换首尾两个字符,在递归地倒置字符数组的剩下部分

输入

字符数组长度及该数组

输出

在求解过程中,打印字符数组的变化情况。 
最后空一行,在程序结尾处打印倒置后该数组的各个元素。

样例输入复制

5 abcde

样例输出复制

ebcda
edcbaedcba

代码:

#include<iostream>
#include<string>
using namespace std;
int n;
string str;
void BEswap(int l, int r)
{if (l == r || l > (r - 1) / 2) return;std::swap(str[l], str[r]);cout << str << endl;BEswap(l + 1, r - 1);
}
int main()
{cin >> n >> str;BEswap(0, n - 1);cout << endl << str << endl;return 0;
}

运行结果:

1544 特殊的质数肋骨

题目描述

农民约翰母牛总是产生最好的肋骨。你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们。农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数字都组成一个质数。

例如有四根肋骨的数字分别是:7  3  3  1,那么全部肋骨上的数字  7331是质数;三根肋骨  733是质数;二根肋骨  73  是质数;当然,最后一根肋骨  7  也是质数。7331  被叫做长度  4  的特殊质数。

写一个程序对给定的肋骨的数目  N  (1< =N< =8),求出所有的特殊质数。数字1不被看作一个质数。

输入

单独的一行包含N。 (1< =N< =8)

输出

按顺序输出长度为  N  的特殊质数,每行一个。

样例输入复制

4 

样例输出复制

2333
2339
2393
2399
2939
3119
3137
3733
3739
3793
3797
5939
7193
7331
7333
7393

代码:

#include<iostream>
#include<cmath>
using namespace std;
bool Issushu(int n)
{for (int i = 2; i <= floor(sqrt(n) + 0.5); i++){if (n % i == 0){return false;}}return true;
}
int main()
{int n;cin >> n;int max = pow(10, n) - 1;int min = 2*pow(10, n - 1);for (int i = min; i <= max; i++){int k = n;while (k > 0){if (Issushu(i / pow(10, k - 1))) k--;elsebreak;}if (k == 0)cout << i << endl;elsei = i - 1 + pow(10, k - 1);}return 0;
}

运行结果:

动态规划

1557 聪明的旅行家

题目描述

如果有人认为吃东西只需要嘴巴,那就错了。
都知道舌头有这么一个特性,“由简入奢易,由奢如简难”(据好事者考究,此规律也适合许多其他情况)。具体而言,如果是甜食,当你吃的食物不如前面刚吃过的东西甜,就很不爽了。

大宝是一个聪明的美食家,当然深谙此道。一次他来到某小吃一条街,准备从街的一头吃到另一头。为了吃得爽,他大费周章,得到了各种食物的“美味度”。他拒绝不爽的经历,不走回头路而且还要爽歪歪(爽的次数尽量多)。

输入

两行数据。 
第一行为一个整数n,表示小吃街上小吃的数量

第二行为n个整数,分别表示n种食物的“美味度”

数据规模和约定

美味度为0到100的整数
n< 1000

输出

一个整数,表示吃得爽的次数

样例输入复制

10
3 18 7 14 10 12 23 41 16 24

样例输出复制

6

答案链接:WU-蓝桥杯算法提高VIP-聪明的美食家 (C++代码)-Dotcpp编程社区

解析:

1.要使爽的次数足够多,则根据美味度从小到大进行品尝
2.定义一个专门存放次数的数组,采用两个数组指针,i指针比j指针走快一步,如果前后之间形成递增关系,则次数加1
3.如果没有递增,则次数不变

--------------------------------------------------------------------------

数组由小到大进行排序:

#include<algorithm>

.....

sort(数组名,数组名+个数);

代码:

#include <iostream>
#include <algorithm>
using namespace std;
int main() {  int n;  cin >> n;  int *a = new int [n];  int *b = new int [n]; //开辟两个动态数组for(int i = 0; i < n; i++)  {cin >> a[i];  b[i]=1;//b[i]表示前i+1个数中的最大不下降子序列的长度  初始值为1 }for(int i = 0; i < n; i++) {  for(int j = 0; j < i; j++) {  if(a[i] >=a[j])  //如果a[i]大于等于a[j],那么最大不下降子序列的长度就会+1b[i] = max(b[i], b[j]+1);  //我们取较大的那个}  }  sort(b,b+n);//对数组进行排序cout<<b[n-1]<<endl;//输出最大值return 0; 

运行结果:

1610 传球游戏(错误8)

题目描述

上体育课的时候,小蛮的老师经常带着同学们一起做游戏。这次,老师带着同学们一起做传球游戏。
游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师再次吹哨子时,传球停止,此时,拿着球没传出去的那个同学就是败者,要给大家表演一个节目。
聪明的小蛮提出一个有趣的问题:有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了m次以后,又回到小蛮手里。两种传球的方法被视作不同的方  法,当且仅当这两种方法中,接到球的同学按接球顺序组成的序列是不同的。比如有3个同学1号、2号、3号,并假设小蛮为1号,球传了3次回到小蛮手里的方  式有1-> 2-> 3-> 1和1-> 3-> 2-> 1,共2种。

输入

共一行,有两个用空格隔开的整数n,m(3< =n< =30,1< =m< =30)。

数据规模和约定
100%的数据满足:3< =n< =30,1< =m< =30

输出

t共一行,有一个整数,表示符合题意的方法数。

样例输入复制

3 3

样例输出复制

2

答案原出处:蓝桥杯算法训练VIP-传球游戏-题解(C++代码)(含思路)-Dotcpp编程社区

解析:

假设有3个人,将每个人每次的获球情况组成一个数组,求出的数组的答案就是不同的传递情况

动态规划思路

先通过最简单的情况推出规律

eg:n=3,m=3,开辟一个数组dp[i][j],i为传球次数,j为人数,dp[i][j]表示的是第i的次传球传到j的个人手中的可能性

最初还未开始传球,球在1的个人手中,且传0次球,故dp = (1,0,0)

然后开始传球,由于最初球在1手中,故,1只能将球传出去,自己必然得不到球,而他也只能向左或右传球,故此时第一个人得到球的可能性为0种,第二第三个人的可能性为1种,dp = (0,1,1)

进行第二次传球:此时球在第二个人或第三个人手中,先讨论第二个人,它只能将球传给第一个人或第三个人,再讨论三的个人传球,它可以传球给第一个和第二个人,故第一个人有两种得球可能性,第二第三个人各一种,dp = (2, 1,1)

将dp数组列出找规律

1,0,0

0,1,1

2,1,1

发现下一行的元素等于上一行对应列的左边和右边的元素的和

故就推出了规律

dp[i][j] = dp[i-1][j-1]+dp[i-1][j+1]

但还要考虑在两边的情况,需单独列出,到此思路就搞定了

代码:

#include<iostream>
using namespace std;
int a[40][40];
int main()
{int m, n;cin >> m >> n;a[0][0] = 1;for (int i = 1; i <= m; ++i){for (int j = 0; j < n; ++j){if (j == 0){a[i][0] = a[i - 1][n-2] + a[i - 1][n - 1];}else if (j == n - 1){a[i][n - 1] = a[i - 1][0] + a[i - 1][n - 2];}else{a[i][j] = a[i - 1][j - 1] + a[i - 1][j + 1];}}}cout << a[m][0];return 0;
}

运行结果:

1633 数的统计

题目描述

在一个有限的正整数序列中,有些数会多次重复出现在这个序列中。
如序列:3,1,2,1,5,1,2。其中1就出现3次,2出现2次,3出现1  次,5出现1次。
你的任务是对于给定的正整数序列,从小到大依次输出序列中出现的数及出现的次数。

输入

第一行正整数n,表示给定序列中正整数的个数。

第二行是n  个用空格隔开的正整数x,代表给定的序列。

数据规模和约定
数据:n< =1000;0< x< =1000,000。

输出

若干行,每行两个用一个空格隔开的数,第一个是数列中出现的数,第二个是该数在序列中出现的次数。

样例输入复制

12
8 2 8 2 2 11 1 1 8 1 13 13

样例输出复制

1 3
2 3
8 3
11 1
13 2

解析:

1.sort排序

2.定义k来表示数组相等的数,sum计数

代码:

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{int n,ch;cin >> n;int* a = new int[n];for (int i = 0; i < n; i++){cin >> ch;a[i] = ch;}sort(a, a + n);int k = 0;while (k < n){int sum = 1;while (a[k] == a[k + 1]){++sum;k++;}cout << a[k] << "\t" << sum << endl;k++;}return 0;
}

运行结果:

进制

做到进制,我看的这篇博客真的很棒,其它的做法或多或少有点弯弯绕绕,但这篇单刀直入:(64条消息) C++中八进制、十进制和十六进制之间的相互转换_福小简的博客-CSDN博客

这篇博客是关于二进制函数bitset的相关使用,用这篇内容的方法解决问题特别简单:(64条消息) c++ bitset类用法_Liam Q的专栏-CSDN博客

1572 进制转换(答案错误27)

题目描述

程序提示用户输入三个字符,每个字符取值范围是0-9,A-F。然后程序会把这三个字符转化为相应的十六进制整数,并分别以十六进制,十进制,八进制输出。

输入

输入只有一行,即三个字符。

输出

三个整数,中间用空格隔开。

样例输入复制

FFF 

样例输出复制

FFF 4095 7777

代码:

#include<iostream>
using namespace std;
int main()
{int n;cin >> hex >> n;cout << hex << n << "\t";cout << dec << n << "\t";cout << oct << n << endl;return 0;
}

运行结果:

1934 十进制数转八进制数

题目描述

编写函数,其功能为把一个十进制数转换为其对应的八进制数。程序读入一个十进制数,调用该函数实现数制转换后,输出对应的八进制数。

输入

9274

输出

22072

样例输入复制

18

样例输出复制

22

代码:

#include<iostream>
using namespace std;
int main()
{int n;cin>>n;cout<<oct<<n<<endl;return 0;
}

运行结果:

2619 二进制问题(时间超限27)

题目描述

小蓝最近在学习二进制。他想知道 1 到 N 中有多少个数满足其二进制表示中恰好有 K 个 1。你能帮助他吗?

输入

输入一行包含两个整数 N 和 K。

输出

输出一个整数表示答案。

样例输入复制

7 2

样例输出复制

3

解析:

1.将每个遍历到的数字转换为二进制  bitset<4>a(i);

2.应用二进制a.size()函数求出1的个数,累加

3.输出累加后的count

(58条消息) c++ bitset类用法_Liam Q的专栏-CSDN博客

代码:

#include<iostream>
#include<bitset>
using namespace std;
int main()
{int N, K, n, count = 0;cin >> N >> K;for (int i = 1; i <= N; ++i){bitset<4>a(i);if (a.count() == K){++count;}}cout << count << endl;return 0;
}

运行结果:

2080 十六进制转八进制

题目描述

给定n个十六进制正整数,输出它们对应的八进制数。

输入

输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

输出

输出n行,每行为输入对应的八进制正整数。

【注意
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。

样例输入复制

2
39
123ABC

样例输出复制

71
4435274

代码:

#include<iostream>
#include<string>
using namespace std;
int main()
{int n,ch;cin>>n;for(int i=0;i<n;i++){cin>>hex>>ch;cout<<oct<<ch<<endl;}return 0;
}

运行结果:

2082 十六进制转十进制

题目描述

从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。

输入

一个十六进制数

输出

对应得十进制

样例输入复制

FFFF

样例输出复制

65535

代码:

#include<iostream>
using namespace std;
int main()
{int str;cin>>hex>>str;cout<<dec<<str<<endl;return 0;
}

运行结果:

2083 十进制转十六进制 (答案错误45)

题目描述

十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。
给出一个非负整数,将它表示成十六进制的形式。

输入

输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647

输出

输出这个整数的16进制表示

样例输入复制

30

样例输出复制

1E

代码:

#include<iostream>
using namespace std;
int main()
{int ch;cin >> ch;cout << hex << ch << endl;return 0;
}

运行结果:

2218 二进制数数(答案错误17)

题目描述

给定L,R。统计[L,R]区间内的所有数在二进制下包含的“1”的个数之和。
如5的二进制为101,包含2个“1”。

输入

第一行包含2个数L,R

输出

一个数S,表示[L,R]区间内的所有数在二进制下包含的“1”的个数之和。

样例输入复制

2 3

样例输出复制

3

代码:

#include<iostream>
#include<bitset>
using namespace std;
int main()
{int L, R, sum = 0;cin >> L >> R;for (int i = L; i <= R; i++){bitset<4> a(i);sum += a.count();}cout << sum << endl;return 0;
}

运行结果:

2248 输出二进制表示

题目描述

输入[-128,127]内的整数,输出其二进制表示。

输入

一个满足题目要求的输入范例。

输入数据中每一个数的范围。
例:0<n,m<100, 0<=矩阵中的每个数<=1000。

输出

与上面的样例输入对应的输出。

样例输入复制

7

样例输出复制

00000111

代码:

#include<iostream>
#include<bitset>
using namespace std;
int main()
{int ch;cin >> ch;if (ch>= -128 || ch<=127){cout << bitset<8>(ch);}return 0;
}

运行结果:

模拟

1429 兰顿蚂蚁(答案错误25)

题目描述

兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种。

平面上的正方形格子被填上黑色或白色。在其中一格正方形内有一只“蚂蚁”。
蚂蚁的头部朝向为:上下左右其中一方。

蚂蚁的移动规则十分简单:
若蚂蚁在黑格,右转90度,将该格改为白格,并向前移一格;
若蚂蚁在白格,左转90度,将该格改为黑格,并向前移一格。

规则虽然简单,蚂蚁的行为却十分复杂。刚刚开始时留下的路线都会有接近对称,像是会重复,但不论起始状态如何,蚂蚁经过漫长的混乱活动后,会开辟出一条规则的“高速公路”。

蚂蚁的路线是很难事先预测的。

你的任务是根据初始状态,用计算机模拟兰顿蚂蚁在第n步行走后所处的位置。

输入

输入数据的第一行是  m  n  两个整数(3  <   m,  n  <   100),表示正方形格子的行数和列数。 
接下来是  m  行数据。 
每行数据为  n  个被空格分开的数字。0  表示白格,1  表示黑格。

接下来是一行数据:x  y  s  k,  其中x  y为整数,表示蚂蚁所在行号和列号(行号从上到下增长,列号从左到右增长,都是从0开始编号)。s  是一个大写字母,表示蚂蚁头的朝向,我们约定:上下左右分别用:UDLR表示。k  表示蚂蚁走的步数。

输出

输出数据为一个空格分开的整数  p  q,  分别表示蚂蚁在k步后,所处格子的行号和列号。

样例输入复制

5 6
0 0 0 0 0 0
0 0 0 0 0 0
0 0 1 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
2 3 L 5

样例输出复制

1 3

解析:

1.定义矩阵的行列,蜘蛛的位置,步数以及方向
2.定义一个二维数组
3.深度遍历
  ①当前步数=规定步数,输出蜘蛛此刻的位置
  ②当前位置在白格
  ③当前位置在黑格
4.设定行列数,当前位置,要走的步数,方向等
5.实现深度遍历函数

代码:

#include<iostream>
using namespace std;
int m, n, x, y, k;
char s;
int map[1000][1000];
void Dfs(int x, int y, int cnt, char s)
{if (cnt == k){cout << x-1 << "\t" << y << endl;return;}else if (map[m][n] == 1){map[m][n] = 0;if (s == 'L'){Dfs(x - 1, y, cnt + 1, 'U');}else if (s == 'R'){Dfs(x + 1, y, cnt + 1, 'D');}else if (s == 'U'){Dfs(x, y + 1, cnt + 1, 'R');}else if (s == 'D'){Dfs(x, y - 1, cnt + 1, 'L');}}else if (map[m][n] == 0){map[m][n] = 1;if (s == 'L'){Dfs(x + 1, y, cnt + 1, 'D');}else if (s == 'R'){Dfs(x - 1, y, cnt + 1, 'U');}else if (s == 'U'){Dfs(x, y - 1, cnt + 1, 'L');}else if (s == 'D'){Dfs(x, y + 1, cnt + 1, 'R');}}
}
int main()
{cin >> m >> n;for (int i = 0; i < m; i++){for (int j = 0; j < n; j++){cin >> map[i][j];}}cin >> x >> y >> s >> k;Dfs(x, y, k, s);return 0;
}

运行结果:

1480 模拟计算器(答案错误82)

题目描述

使用Switch语句编写一个模拟简单计算器的程序。依次输入两个整数和一个字符,并用空格隔开。如果该字  符是一个“+”,则打印和;如果该字符是一个“-”,则打印差;如果该字符是一个“*”,则打印积;如果该字符是“/”,则打印商;如果该字符是一个  “%”,则打印余数。打印结果后输出一个空行。

输入

输出

样例输入复制

3 4 +

样例输出复制

7

代码:

#include<iostream>
using namespace std;int main()
{char ch;int a, b, c;cin >> a >> b >> ch;switch (ch){case '+':c = a + b;break;case '-':c = a - b;break;case '*':c = a * b;break;case '/':c = a / b;break;}cout << c;cout << endl;return 0;
}

运行结果:

1481 剪刀石头布(答案错误80)

题目描述

编写程序实现“剪刀,石头,布”游戏。在这个游戏中,两个人同时说“剪刀”,“石头”或“布”,压过另一方的为胜者。规则是:“布”胜过“石头”,“石头”胜过“剪刀”,“剪刀”胜过“布”。要求:选择结构中使用枚举类型,结果的输出也使用枚举类型表示。

输入

两个数,范围为{0,1,2},用空格隔开。0表示石头,1表示布,2表示剪刀。这两个数分别表示两个人所说的物品。

输出

如果前者赢,输出1。如果后者赢,输出-1。如果是平局,输出0。

样例输入复制

0 2

样例输出复制

1

代码:

#include<iostream>
using namespace std;
int main()
{int a, b;  //0---石头 1---布 2---剪刀cin >> a >> b;if (a == 0 && b == 1){cout << "-1";}else if (a == 0 && b == 2){cout << "1";}else if (a == 1 && b == 0){cout << "1";}else if (a == 1 && b == 2){cout << "-1";}elsecout << "0";
}

运行结果:

蓝桥杯练习系统[C++]相关推荐

  1. 蓝桥杯练习系统习题-历年真题解析2(完整版)

    文章推荐 精选java等全套学习资源 精选java电子图书资源 精选大数据学习资源 java项目练习精选 蓝桥杯练习系统习题-历年真题解析2 题目搜索方式:Ctrl+F--> 输入题目名称-&g ...

  2. 蓝桥杯练习系统习题-历年真题解析1(完整版)

    文章推荐 精选java等全套学习资源 精选java电子图书资源 精选大数据学习资源 java项目练习精选 蓝桥杯练习系统习题-历年真题解析1 题目搜索方式:Ctrl+F--> 输入题目名称-&g ...

  3. 蓝桥杯练习系统习题-算法提高2

    文章推荐 精选java等全套学习资源 精选java电子图书资源 精选大数据学习资源 java项目练习精选 蓝桥杯练习系统习题-算法提高2 题目搜索方式:Ctrl+F--> 输入题目名称-> ...

  4. 蓝桥杯练习系统习题-算法提高1

    文章推荐 精选java等全套学习资源 精选java电子图书资源 精选大数据学习资源 java项目练习精选 蓝桥杯练习系统习题-算法提高1 题目搜索方式:Ctrl+F--> 输入题目名称-> ...

  5. 蓝桥杯练习系统习题-算法训练6

    文章推荐 精选java等全套学习资源 精选java电子图书资源 精选大数据学习资源 java项目练习精选 蓝桥杯练习系统习题-算法训练6 题目搜索方式:Ctrl+F--> 输入题目名称-> ...

  6. 蓝桥杯练习系统习题-算法训练5

    文章推荐 精选java等全套学习资源 精选java电子图书资源 精选大数据学习资源 java项目练习精选 蓝桥杯练习系统习题-算法训练5 题目搜索方式:Ctrl+F--> 输入题目名称-> ...

  7. 蓝桥杯练习系统习题-算法训练3

    文章推荐 精选java等全套学习资源 精选java电子图书资源 精选大数据学习资源 java项目练习精选 蓝桥杯练习系统习题-算法训练3 题目搜索方式:Ctrl+F--> 输入题目名称-> ...

  8. 蓝桥杯练习系统习题-算法训练2

    文章推荐 精选java等全套学习资源 精选java电子图书资源 精选大数据学习资源 java项目练习精选 蓝桥杯练习系统习题-算法训练2 题目搜索方式:Ctrl+F--> 输入题目名称-> ...

  9. 蓝桥杯练习系统习题-算法训练1

    蓝桥杯练习系统习题-算法训练1 题目搜索方式:Ctrl+F--> 输入题目名称->定位到解答. 入门训练(详见 算法-蓝桥杯习题(1-1)) 基础练习(详见 算法-蓝桥杯习题(2-1)) ...

  10. 蓝桥杯练习系统习题-基础训练2

    文章推荐 精选java等全套学习资源 精选java电子图书资源 精选大数据学习资源 java项目练习精选 蓝桥杯练习系统习题-基础训练2 题目搜索方式:Ctrl+F--> 输入题目名称-> ...

最新文章

  1. windows 防火墙导致开发板tftpboot不能正常下载
  2. 学维修电脑要多久_学蛋糕一般要学习多久、学费贵吗?
  3. 【Vue Laravel-mix】Error with Vue lazy loading components: “Failed to resolve async component“
  4. 读债务危机0819:政府成立救助基金
  5. No space left on device 解决 Cydia 安装应用错误
  6. Python爬虫入门四urllib库的高级用法
  7. scikit_learn逻辑回归类库
  8. powerbi python词云图_Python 练手项目: 抓取豆瓣陈情令评论,并制作词云图
  9. 面试题32:从上到下打印二叉树
  10. Homebrew基本命令
  11. “物联网开发实战”学习笔记-(一)硬件开发环境的搭建
  12. nodejs tinypng 压缩
  13. #TCP你学得会# Wireshark中的TCP Spurious Retransmission
  14. 三、判断三元一次方程组是否有解及求解——(计算糖果)
  15. 使用CA签发的服务器证书搭建Tomcat双向SSL认证服务
  16. Power BI 精美的可视化图表
  17. 2022年,AI将给网络安全领域带来什么?
  18. 一文读懂 WalletConnect
  19. STM32模拟USB多点触控屏
  20. 软件配置管理岗位职责说明

热门文章

  1. LTE网络的混合组网方式
  2. Linux帮助命令及开关机命令
  3. Spectral analysis——光谱分析
  4. Z-File 开源免费的个人自建网盘程序,简约专业的个人云盘源码
  5. 租个阿里云服务器多少钱, 阿里云服务器租赁费用计算
  6. Python-爬虫(requests库、二进制数据(图片)获取,GET/POST请求、session请求)
  7. 使用Redux-Toolkit,由“object is not extensible”引发的思考及解决方案
  8. 远程连接阿里云服务器MySQL数据库
  9. 迭代器遍历,增强for遍历
  10. Windows中安全弹出U盘的操作__2018.06.02