P1010 幂次方 P1022 计算器的改良
P1010 幂次方
一、题目
https://www.luogu.org/problemnew/show/P1010
二、代码
- #include<bits/stdc++.h>
- using namespace std;
- // 根据2的几次幂进行分解
- string decompose(int num)
- {
- if(num==)
- {
- return "";
- }
- string s = "";
- int exp = ; // 指数,比如2=2^1,则指数为1
- do
- {
- if(num & ) // 判断奇数
- {
- // num=2时,exp==1才为真
- string tmp1 = exp== ? "" : "2("+decompose(exp)+")";
- string tmp2 = s=="" ? "" : "+";
- // 拼接字符串,依题意,要把低次方接在后面
- s = tmp1 + tmp2 + s;
- }
- exp++;
- } while(num >>= );//每次向右移一位,即除以2
- return s;
- }
- int main()
- {
- int x;
- cin>>x;
- cout<<decompose(x)<<endl;
- return ;
- }
P1022 计算器的改良
一、题目
https://www.luogu.org/problemnew/show/P1022
二、代码
- #include<bits/stdc++.h>
- using namespace std;
- int main()
- {
- int coe = ; // coe * x = value, coe即为x的系数
- int value = ;
- int pos = -; // 数值位于等号左边的数为负(移到右边即为正),位于等号右边的数为正
- char c = getchar();
- int num = ; // 当前读入的数值
- int sign = ; // 当前数值符号,
- char x; // 未知数,26个小写字母之一
- while(true)
- {
- if (c>='a' && c<='z')
- {
- x = c;
- if (num == )
- {
- // 系数为1
- coe += -pos * sign;
- }
- else
- {
- coe += -pos * sign * num; //系数左边为正,右边为负,所以pos要取负
- }
- num = ;
- sign = ;
- }
- else if (c == '-')
- {
- value += pos * sign * num;
- num = ;
- sign = -;
- }
- else if (c == '+')
- {
- value += pos * sign * num;
- num = ;
- sign = ;
- }
- else if (c >= '' && c <= '')
- {
- num = num * + c - '';
- }
- else if (c == '=')
- {
- value += pos * sign * num;
- num = ;
- sign = ;
- pos = -pos; //等号右边pos为正
- }
- else // 换行的时候,要把最后的数(如果有)累加到valu
- {
- value += pos * sign * num;
- break;
- }
- c = getchar();
- }
- double ans = double(value) / coe;//计算ans
- printf("%c=%.3f", x, ans == ? abs(ans) : ans);//这涉及一个很坑的地方:C++里0除以一个负数值为-0,专门避免这种情况
- return ;
- }
UVA524 素数环
一、题目
https://www.luogu.org/problemnew/show/UVA524
二、分析
例1:以n = 4为例。n = 4的排列有
1,2,3,4 相邻两个数相加都是素数,符合题意
1,2,4,3 2和4相加不是素数,不符合题意
1,3,2,4 2和4相加不是素数,不符合题意
1,3,4,2 4和2相加不是素数,不符合题意
1,4,2,3 4和2相加不是素数,不符合题意
1,4,3,2 相邻两个数相加都是素数,符合题意。
所以正确的答案为
1,2,3,4
1,4,3,2
例2:以n = 5为例。n = 5的排列有
1,2,3,4,5 4和5相加不是素数,不符合题意
1,2,3,5,? 3和5相加不是素数,不符合题意
1,2,4,? 2和4相加不是素数,不符合题意
1,2,5,3,? 5和3相加不是素数,不符合题意
1,2,5,4,? 5和4相加不是素数,不符合题意
1,3,? 1和3相加不是素数,不符合题意
1,4,2,? 4和2相加不是素数,不符合题意
1,4,3,2,5 5和1相加不是素数,不符合题意
1,4,3,5,? 3和5相加不是素数,不符合题意
1,4,5,? 4和5相加不是素数,不符合题意
1,5,? 1和5相加不是素数,不符合题意
所以n=5时,没有答案。
三、代码
- #include<bits/stdc++.h>
- using namespace std;
- int n;
- int a[];
- int prime[];
- bool visited[]; //visited[num]用来标记num是否被使用了
- // pos为数组下标
- void dfs(int pos)
- {
- // num为数组中的数
- for(int num=; num<=n; num++)
- {
- // 如果这个数已经使用,则不能再用
- if(visited[num])
- {
- continue;
- }
- if(prime[a[pos-] + num]) //当前数num与上一个数的和为素数
- {
- visited[num] = true; // 标记
- a[pos] = num; // 存储,后面需要打印出来
- if(pos == n) // 放完了n个数
- {
- if(prime[a[pos] + ]) //这是一个环,所以要计算最后一个数与第一个数1的和
- {
- for(int j = ; j < n; j++)
- {
- printf("%d ",a[j]);
- }
- printf("%d\n", a[n]); //这里很恶心,行末不能有空格
- }
- }
- else
- {
- dfs(pos + );
- }
- visited[num] = false; //回溯
- }
- }
- }
- int main()
- {
- // 素数打表
- prime[]=prime[]=prime[]=prime[]=prime[]=prime[]=prime[]=prime[]=prime[]=prime[]=prime[]=true; //先处理一下素数
- int cnt = ; // 输出的第几组数据
- while(scanf("%d",&n) == )
- {
- cnt++;
- printf("Case %d:\n",cnt);
- a[] = ; //第一个数是1
- visited[] = true; // 这一句可写可不写,因为1就是第一个数
- dfs(); //从第二个数开始搜
- cout << endl;
- }
- return ;
- }
P4326 求圆的面积
一、题目
https://www.luogu.org/problemnew/show/P4326
二、分析
COCI是Crotian Open Competition in Informatics, 即克罗地亚信息学公开赛。
本题的坑点在于有些人不知道所谓的出租车几何下的“圆”其实是一个正方形:

上面这个“圆”中,中心点到边上的任意一点的距离都为|x1 - x2| + |y1 - y2| = 4。
这个“圆”是由上下两个三角形组成的,每个三角形的面积为2r * r / = r * r,所以“圆”的面积为2 * r * r。
- #include <iostream>
- #include <cstdio>
- using namespace std;
- const double pi = 3.141592653589793;
- int main()
- {
- double r;
- cin >> r;
- printf("%.6f\n", pi * r * r);
- printf("%.6f\n", * r * r);
- return ;
- }
P1009 阶乘之和
- #include<iostream>
- using namespace std;
- int a[];
- int c[];
- const int maxDigit=; //最大位数,调试时可设n=4,maxDigit=3
- // 阶乘相加
- void add(int *a,int *c)
- {
- int carry = ;
- // 比如1!+2!+3!+4!
- // i=1时,c[1]=1!=1
- // i=2时,c[1]=1+2!=3
- // i=3时,c[1]=3+3!=9
- // i=4时,c[1]=9+4=13,carry=1,c[1]=3,c[2]=c[2]+a[2]+carry=0+2+1=3
- for(int i = ; i <= maxDigit; i++)
- {
- c[i] += (a[i] + carry);
- carry = c[i]/;
- c[i] %= ;
- }
- }
- //求阶乘
- void fact(int *a,int num)
- {
- int carry = ; // 进位
- for(int i=; i <= maxDigit; i++)
- {
- // 从高位往低位存储数据,比如5!=120,则a[4]=a[5]=...=0,a[3]=1,a[2]=2,a[1]=0
- a[i] = a[i] * num + carry;
- carry = a[i] / ;
- a[i] %= ;
- }
- }
- int main()
- {
- int n;
- cin >> n;
- a[] = ;
- for(int i=;i<=n;i++)
- {
- fact(a, i);
- add(a, c);
- }
- bool flag = false; // 当碰到第一个非0时,更新为true
- for(int i = ; i >= ; i--)
- {
- // 左边的0不要打印出来,从第一个非0数字开始打印
- // 比如000……000120,打印出120
- if(c[i] != )
- {
- flag = true;
- }
- if(flag)
- {
- cout << c[i];
- }
- }
- return ;
- }
P1007 独木桥
- #include <iostream>
- #include <cstdio>
- using namespace std;
- int main()
- {
- int n,l,p,maxT=,minT=;
- scanf("%d%d",&l,&n);
- for(int i=;i<=n;i++)
- {
- scanf("%d",&p);
- maxT=max(maxT,max(l+-p,p));
- minT=max(minT,min(l+-p,p));
- }
- printf("%d %d",minT,maxT);
- return ;
- }
P1002 过河卒
- #include<iostream>
- using namespace std;
- long long a[][]={},n,m,my,mx;
- int main()
- {
- cin >> n >> m >> my >> mx;//输入数据
- // 整个棋盘往右往下挪两格,这样马处于原点(挪移后
- // 变成(2,2)点,往左上方跳不会出现数组越界的情况
- n += ; // n行
- m += ; // m列
- my += ;// 马位于第几行
- mx += ;// 马处于第几列
- for(int r = ; r <= n; r++) // 共有n+1行
- {
- for(int c = ; c <= m; c++) // 共有m+1列
- {
- a[r][c] = a[r - ][c] + a[r][c - ]; // 左侧的数 + 上方的数
- a[][]=; // 要初始化为1,若为0后面全是0
- // 马的9个控制点
- a[my][mx]=;// 马本身的位置
- a[my + ][mx + ]=;
- a[my + ][mx - ]=;
- a[my - ][mx + ]=;
- a[my - ][mx - ]=;
- a[my + ][mx + ]=;
- a[my + ][mx - ]=;
- a[my - ][mx + ]=;
- a[my - ][mx - ]=;
- }
- }
- cout <<a[n][m];
- return ;
- }
P1010 幂次方 P1022 计算器的改良的更多相关文章
- P1022 计算器的改良
P1022 计算器的改良 题目背景 NCL 是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能.实验室将这个任务交给 ...
- 洛谷—— P1022 计算器的改良
P1022 计算器的改良 题目背景 NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能.实验室将这个任务交给了 ...
- 洛谷P1022 计算器的改良
P1022 计算器的改良 题目背景 NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能.实验室将这个任务交给了 ...
- 2021.07.26 P1022 计算器的改良(字符串)
2021.07.26 P1022 计算器的改良(字符串) 改进: 如果是我出题,我一定把未知数设为ab.buh.bluesky之类的长度不只是1的字符串! 题意: 一个一元一次方程,求解. 分析: 1 ...
- 2021.07.26 P1010 幂次方(数论)
2021.07.26 P1010 幂次方(数论) [P1010 NOIP1998 普及组] 幂次方 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.二进制 题意: 用20 ...
- 洛谷 P1010 幂次方 Label:模拟
题目描述 任何一个正整数都可以用2的幂次方表示.例如 137=2^7+2^3+2^0 同时约定方次用括号来表示,即a^b 可表示为a(b). 由此可知,137可表示为: 2(7)+2(3)+2(0) ...
- 解题笔记-洛谷-P1010 幂次方
0 题面 题目描述 任何一个正整数都可以用2的幂次方表示.例如 137=2^7+2^3+2^0 同时约定方次用括号来表示,即a^b 可表示为a(b). 由此可知,137可表示为: 2(7)+2(3)+ ...
- P1010 幂次方 递归模拟
题目描述 任何一个正整数都可以用22的幂次方表示.例如 137=2^7+2^3+2^0137=27+23+20 同时约定方次用括号来表示,即a^bab 可表示为a(b)a(b). 由此可知,13713 ...
- p1010幂次方---(分治)
题目描述 任何一个正整数都可以用222的幂次方表示.例如 137=27+23+20137=2^7+2^3+2^0 137=27+23+20 同时约定方次用括号来表示,即aba^bab 可表示为a(b) ...
随机推荐
- Codeforces 442A Borya and Hanabi
有五种花色 外加 五种点数 共25张牌,每次有n张牌,主人知道这n张牌中有哪些牌,并且哪种牌有几张,但是不知道具体是哪张牌,他可以问某种花色,然后知道了哪几张是该花色,也可以问点数,然后就知道了哪几张 ...
- 2,The AudioContext was not allowed to start.
The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on t ...
- Idea 中的快捷键(mac)
Mac键盘符号和修饰键说明 ⌘ Command ⇧ Shift ⌥ Option ⌃ Control ↩︎ Return/Enter ⌫ Delete ⌦ 向前删除键(Fn+Delete) ↑ 上箭头 ...
- JZOJ-2019-11-5 B组
T1 给出一二维01矩阵\(f_{i,j}\), 定义点\((x_a, y_a), (x_b, y_b)\)的「距离」为\(max\{|x_a-x_b|, |y_a-y_b|\}\) 求出一矩阵\(w ...
- Mybatis框架的简单配置
Mybatis 的配置 1.创建项目(当然,这是废话) 2.导包 下载mybatis-3.2.0版:https://repo1.maven.org/maven2/org/mybatis/mybatis ...
- 日志处理中一些shell命令技巧
日志处理中一些shell命令技巧 阴差阳错的做的日志分析,前途未卜的这段日子,唯一还有点意思的可能就是手动的处理大量日志.总结一下. 日志文件的输入是动则几个G的文本.从N个这样的文件中得到一个列表, ...
- 【每日Scrum】第八天冲刺
一.计划会议内容 继续昨天的设计 二.任务看板 任务看板 已完成:登录与个人界面布局实现 进行中:UI设计美化,,地图主界面 待进行:功能整合,连接数据库 三.scrum讨论照片 四.产品的状态 无 ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 排序
从 MySQL 表中使用 SQL SELECT 语句来读取数据. 如果我们需要对读取的数据进行排序,我们就可以使用 MySQL 的 ORDER BY 子句来设定你想按哪个字段哪种方式来进行排序,再返回 ...
- JavaScript—面向对象 贪吃蛇_2 游戏对象
游戏对象 function Game(map) { this.map = map; this.food = new Food(this.map) this.snake = new Snake(this ...
- C语言-再论指针与数组
指针与数组的天生姻缘1.以指针方式来访问数组元素(1).数组元素使用时不能整体访问,只能是单个访问.访问形式有两种:数组形式和指针形式.(2).数组形式访问数组元素:数组名[下标]:(下标从0开始(3 ...