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) ...
随机推荐
- Maven - 构建生命周期、阶段、目标
版权所有,未经授权,禁止转载 章节 Maven – 简介 Maven – 工作原理 Maven – Repository(存储库) Maven – pom.xml 文件 Maven – 依赖管理 Ma ...
- PSI-BLAST|PHI-BLAST|UniProt|IGV|Galaxy|clustalx
生物信息学软件: NCBI:BLAST,设定k-mer 默认是全局比对,Blastn是局部比对. PSI-BLAST最灵敏的BLAST,选中部分矩阵后在数据库中查找相应蛋白. PHI-BLAST找氨基 ...
- 读书笔记 - js高级程序设计 - 第四章 变量 作用域 和 内存问题
5种基本数据类型 可以直接对值操作 判断引用类型 var result = instanceof Array 执行环境 每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这 ...
- WOJ 1538 Stones II 转化背包问题
昨天是我负责这个题目的,最后没搞出来,真的给队伍拖后腿了. 当时都推出来了 我假设最后结果是取了m个物品,则我把这个m个物品按取的先后编号为 k1 k2 k3 k4...km 则最终结果就是 (k1. ...
- vue 插槽 part3
f vue中的插槽 1.<slot>默认内容</slot> 当副组件不传递信息的时候 显示默认内容 2.<slot></slot> 显示的是插槽中所有的 ...
- 向mysql数据库中插入数据时显示“Duplicate entry '1′ for key ‘PRIMARY' ”错误
错误情况如题,出现这个错误的原因十分简单: 很明显,这是主键的问题. 在一张数据表中是不能同时出现多个相同主键的数据的 这就是错误的原因,解决的方法: 1.可以将这张表设置成无主键(mysql支持,其 ...
- ModernCNN
# 深度卷积神经网络(AlexNet) LeNet: 在大的真实数据集上的表现并不尽如⼈意. 1.神经网络计算复杂. 2.还没有⼤量深⼊研究参数初始化和⾮凸优化算法等诸多领域. 机器学习的特征提取:手 ...
- Codeforce 370A Rook, Bishop and King 数学规律
这个题目挺有意思的,给定 起终点,要你求车,象,王分别最少要走多少步 车横竖都能走,而且每步任意走几格,所以它是最容易处理的,如果在同行或者同列,就是1,否则就是2 象要找下规律,象任意对角线都能走, ...
- DNS和hosts
https://zhidao.baidu.com/question/571487394.html 还有ip地址和域名 域名是唯一的 ip也是唯一的 但是一个域名可以对应多个ip(就好比百度只有一个域名 ...
- c语言中多维数组和指针的关系
如图: 执行结果: 说明:由执行结果可知,三个输出的结果相等(可能在不同的平台执行结果不相同,但三个的结果是相等的),数组multi的地址与数组multi[0]的地址相同,都等于存储的第一个整数的地址 ...