P1010 幂次方 P1022 计算器的改良
P1010 幂次方
一、题目
https://www.luogu.org/problemnew/show/P1010
二、代码
#include<bits/stdc++.h> using namespace std;// 根据2的几次幂进行分解 string decompose(int num) {if(num==0){return "0";}string s = "";int exp = 0; // 指数,比如2=2^1,则指数为1do{if(num & 1) // 判断奇数 {// num=2时,exp==1才为真string tmp1 = exp==1 ? "2" : "2("+decompose(exp)+")";string tmp2 = s=="" ? "" : "+";// 拼接字符串,依题意,要把低次方接在后面s = tmp1 + tmp2 + s;}exp++;} while(num >>= 1);//每次向右移一位,即除以2return s; }int main() {int x;cin>>x;cout<<decompose(x)<<endl;return 0; }
View Code
P1022 计算器的改良
一、题目
https://www.luogu.org/problemnew/show/P1022
二、代码
#include<bits/stdc++.h> using namespace std;int main() {int coe = 0; // coe * x = value, coe即为x的系数int value = 0;int pos = -1; // 数值位于等号左边的数为负(移到右边即为正),位于等号右边的数为正char c = getchar();int num = 0; // 当前读入的数值int sign = 1; // 当前数值符号,char x; // 未知数,26个小写字母之一while(true){if (c>='a' && c<='z'){x = c;if (num == 0){// 系数为1coe += -pos * sign;}else{coe += -pos * sign * num; //系数左边为正,右边为负,所以pos要取负 }num = 0;sign = 1;}else if (c == '-'){value += pos * sign * num;num = 0;sign = -1;}else if (c == '+'){value += pos * sign * num;num = 0;sign = 1;}else if (c >= '0' && c <= '9'){num = num * 10 + c - '0';}else if (c == '='){value += pos * sign * num;num = 0;sign = 1;pos = -pos; //等号右边pos为正 }else // 换行的时候,要把最后的数(如果有)累加到valu {value += pos * sign * num;break;}c = getchar();}double ans = double(value) / coe;//计算ans printf("%c=%.3f", x, ans == 0 ? abs(ans) : ans);//这涉及一个很坑的地方:C++里0除以一个负数值为-0,专门避免这种情况return 0; }
View Code
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[100]; int prime[100]; bool visited[100]; //visited[num]用来标记num是否被使用了// pos为数组下标 void dfs(int pos) {// num为数组中的数for(int num=2; num<=n; num++){// 如果这个数已经使用,则不能再用if(visited[num]){continue;}if(prime[a[pos-1] + num]) //当前数num与上一个数的和为素数 {visited[num] = true; // 标记a[pos] = num; // 存储,后面需要打印出来if(pos == n) // 放完了n个数 {if(prime[a[pos] + 1]) //这是一个环,所以要计算最后一个数与第一个数1的和 {for(int j = 1; j < n; j++){printf("%d ",a[j]);}printf("%d\n", a[n]); //这里很恶心,行末不能有空格 }}else{dfs(pos + 1);}visited[num] = false; //回溯 }} }int main() {// 素数打表prime[2]=prime[3]=prime[5]=prime[7]=prime[11]=prime[13]=prime[17]=prime[19]=prime[23]=prime[29]=prime[31]=true; //先处理一下素数int cnt = 0; // 输出的第几组数据while(scanf("%d",&n) == 1){cnt++;printf("Case %d:\n",cnt);a[1] = 1; //第一个数是1visited[1] = true; // 这一句可写可不写,因为1就是第一个数dfs(2); //从第二个数开始搜 cout << endl;}return 0; }
View Code
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", 2 * r * r);return 0; }
View Code
P1009 阶乘之和
#include<iostream> using namespace std;int a[2000]; int c[2000]; const int maxDigit=1000; //最大位数,调试时可设n=4,maxDigit=3// 阶乘相加 void add(int *a,int *c) {int carry = 0;// 比如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=3for(int i = 1; i <= maxDigit; i++){c[i] += (a[i] + carry);carry = c[i]/10;c[i] %= 10;} }//求阶乘 void fact(int *a,int num) {int carry = 0; // 进位for(int i=1; i <= maxDigit; i++){// 从高位往低位存储数据,比如5!=120,则a[4]=a[5]=...=0,a[3]=1,a[2]=2,a[1]=0a[i] = a[i] * num + carry;carry = a[i] / 10;a[i] %= 10;} }int main() {int n;cin >> n;a[1] = 1;for(int i=1;i<=n;i++){fact(a, i);add(a, c);}bool flag = false; // 当碰到第一个非0时,更新为truefor(int i = 1000; i >= 1; i--){// 左边的0不要打印出来,从第一个非0数字开始打印// 比如000……000120,打印出120if(c[i] != 0){flag = true;}if(flag){cout << c[i];}}return 0; }
View Code
P1007 独木桥
#include <iostream> #include <cstdio> using namespace std; int main() {int n,l,p,maxT=0,minT=0;scanf("%d%d",&l,&n);for(int i=1;i<=n;i++){scanf("%d",&p);maxT=max(maxT,max(l+1-p,p));minT=max(minT,min(l+1-p,p));}printf("%d %d",minT,maxT);return 0; }
View Code
P1002 过河卒
#include<iostream> using namespace std;long long a[30][30]={0},n,m,my,mx;int main() {cin >> n >> m >> my >> mx;//输入数据// 整个棋盘往右往下挪两格,这样马处于原点(挪移后// 变成(2,2)点,往左上方跳不会出现数组越界的情况n += 2; // n行m += 2; // m列my += 2;// 马位于第几行mx += 2;// 马处于第几列for(int r = 2; r <= n; r++) // 共有n+1行 {for(int c = 2; c <= m; c++) // 共有m+1列 {a[r][c] = a[r - 1][c] + a[r][c - 1]; // 左侧的数 + 上方的数a[2][2]=1; // 要初始化为1,若为0后面全是0// 马的9个控制点a[my][mx]=0;// 马本身的位置a[my + 2][mx + 1]=0;a[my + 2][mx - 1]=0;a[my - 2][mx + 1]=0;a[my - 2][mx - 1]=0;a[my + 1][mx + 2]=0;a[my + 1][mx - 2]=0;a[my - 1][mx + 2]=0;a[my - 1][mx - 2]=0;}}cout <<a[n][m];return 0; }
View Code
转载于:https://www.cnblogs.com/alan-blog-TsingHua/p/10865507.html
P1010 幂次方 P1022 计算器的改良相关推荐
- 【每日刷题】P1010 幂次方题解
[每日刷题]P1010 幂次方题解 题目描述 任何一个正整数都可以用 $2$ 的幂次方表示.例如 $137=2^7+2^3+2^0 $. 同时约定方次用括号来表示,即 $a^b$ 可表示为 $a(b) ...
- 洛谷 p1010 幂次方 python实现
洛谷 p1010 幂次方 python实现 描述 任何一个正整数都可以用2的幂次方表示.例如 137= 2 7 + 2 3 + 2 0 2^7+2^3+2^0 27+23+20 同时约定方次用括号来表 ...
- 洛谷P1010 幂次方(递归算法)
题目描述 任何一个正整数都可以用 22 的幂次方表示.例如 137=2^7+2^3+2^0137=27+23+20. 同时约定方次用括号来表示,即 a^bab 可表示为 a(b)a(b). 由此可知, ...
- P1022 计算器的改良(落谷)
P1022 计算器的改良 题目背景 NCLL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能.实验室将这个任务交给 ...
- P1010 幂次方 (递归+分治)
题目描述 任何一个正整数都可以用2的幂次方表示.例如 137=2^7+2^3+2^0 同时约定方次用括号来表示,即a^b可表示为a(b). 由此可知,137可表示为: 2(7)+2(3)+2(0) 进 ...
- 洛谷 p1010 幂次方
#include <cstdio> #include <cmath> using namespace std; void dg(int n) {int a;if(n==0) r ...
- 【洛谷】P1010 幂次方
[NOIP1998 普及组] 幂次方 题目描述 任何一个正整数都可以用 222 的幂次方表示.例如 $137=27+23+2^0 $. 同时约定方次用括号来表示,即 aba^bab 可表示为 a(b) ...
- P1010 幂次方 【分治递归】
题目描述 任何一个正整数都可以用 22 的幂次方表示.例如 137=2^7+2^3+2^0137=27+23+20. 同时约定方次用括号来表示,即 a^bab 可表示为 a(b)a(b). 由此可知, ...
- 洛谷-P1010 幂次方
题目描述 任何一个正整数都可以用 22 的幂次方表示.例如 137=2^7+2^3+2^0137=27+23+20. 同时约定方次用括号来表示,即 a^bab 可表示为 a(b)a(b). 由此可知, ...
最新文章
- 终于有人把 Docker 讲清楚了,万字详解!
- uni-app 修改富文本信息中的图片样式
- carplay是否可以用安卓系统_是否可以仅用键盘来操作Windows 10系统和Windows 10应用?...
- 白话Elasticsearch66-针对集群重启时的shard恢复耗时过长问题定制的重要参数
- Postman获取App端接口
- nginx 禁止通过IP,未绑定域名访问服务器
- eclipse中取消控制台中打印的日志的条数限制
- 计算机语言恢复,win10系统找回消失不见语言栏的恢复方法
- 输入URL经历的过程
- 结对-结对编项目作业名称-开发环境搭建过程
- 课程设计 - 运动控制卡(云服务器)
- Java将JSON对象或JSON数组转list对象
- 高中生物神经系统的组成,初中生物神经系统考题
- opencv 叠加文字_利用opencv为视频添加动态字幕
- 记一次Windows 无法加载这个硬件的设备驱动程序。驱动程序可能已损坏或不见了。 (代码 39)
- android仿iphone日期时间选择器,jquery仿苹果的时间/日期选择效果
- 新西兰计算机工作好找么,去新西兰留学真的很差么?我看到有很多人都说那边的学习氛围不好而且毕业了不好找工作·········...
- JVM调优前置知识-深堆Retained Heap和浅堆Shallow Heap
- Macbook环境配置之个人配置
- 热水器进水阀与角阀连接处漏水
热门文章
- python提取文本中的数字_EXCEL中提取汉字、字母、数字如此简单
- 将三角形绕点b顺时针旋转90度_模型 | 图形旋转与翻折题型汇编
- php怎么把日志推送过去_实践 | 基于Flink的用户行为日志分析系统
- java局部变量的描述正确的是_【Java入门课|这才是Java局部变量的正确使用方法,你真的会用这些吗】- 环球网校...
- mono linux 运行机制,linux – Mono如何神奇?
- 如何跨服务器访问html 页面,html页面如何跨域访问另一页面内容,并将部分内容呈现出来?...
- 帆软报表如何传递主表原有参数给子表呢_报表工具--钻取功能--超链接下钻
- 光纤熔接盒盘线方法_唐品小课堂光纤色谱
- linux云自动化运维,linux云自动化系统运维17(延时服务及定时服务)
- java+icepdf+下载_Java使用icepdf将pdf文件按页转成图片