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 计算器的改良的更多相关文章

  1. P1022 计算器的改良

    P1022 计算器的改良 题目背景 NCL 是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能.实验室将这个任务交给 ...

  2. 洛谷—— P1022 计算器的改良

    P1022 计算器的改良 题目背景 NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能.实验室将这个任务交给了 ...

  3. 洛谷P1022 计算器的改良

    P1022 计算器的改良 题目背景 NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能.实验室将这个任务交给了 ...

  4. 2021.07.26 P1022 计算器的改良(字符串)

    2021.07.26 P1022 计算器的改良(字符串) 改进: 如果是我出题,我一定把未知数设为ab.buh.bluesky之类的长度不只是1的字符串! 题意: 一个一元一次方程,求解. 分析: 1 ...

  5. 2021.07.26 P1010 幂次方(数论)

    2021.07.26 P1010 幂次方(数论) [P1010 NOIP1998 普及组] 幂次方 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.二进制 题意: 用20 ...

  6. 洛谷 P1010 幂次方 Label:模拟

    题目描述 任何一个正整数都可以用2的幂次方表示.例如 137=2^7+2^3+2^0 同时约定方次用括号来表示,即a^b 可表示为a(b). 由此可知,137可表示为: 2(7)+2(3)+2(0) ...

  7. 解题笔记-洛谷-P1010 幂次方

    0 题面 题目描述 任何一个正整数都可以用2的幂次方表示.例如 137=2^7+2^3+2^0 同时约定方次用括号来表示,即a^b 可表示为a(b). 由此可知,137可表示为: 2(7)+2(3)+ ...

  8. P1010 幂次方 递归模拟

    题目描述 任何一个正整数都可以用22的幂次方表示.例如 137=2^7+2^3+2^0137=27+23+20 同时约定方次用括号来表示,即a^bab 可表示为a(b)a(b). 由此可知,13713 ...

  9. p1010幂次方---(分治)

    题目描述 任何一个正整数都可以用222的幂次方表示.例如 137=27+23+20137=2^7+2^3+2^0 137=27+23+20 同时约定方次用括号来表示,即aba^bab 可表示为a(b) ...

随机推荐

  1. 专题复习--背包问题+例题(HDU 2602 、POJ 2063、 POJ 1787、 UVA 674 、UVA 147)

    *注 虽然没什么人看我的博客但我还是要认认真真写给自己看 背包问题应用场景给定 n 种物品和一个背包.物品 i 的重量是 w i ,其价值为 v i ,背包的容量为C.应该如何选择装入背包中的物品,使 ...

  2. NumPy - 数组(定义,拼接)

    NumPy 教程(数组) set_printoptions(threshold='nan') NumPy的数组中比较重要ndarray对象属性有: ndarray.ndim:数组的维数(即数组轴的个数 ...

  3. AJAX(阿贾克斯)的简单应用

    1.ajax 对象的属性说明(常用的) (1)open(method,url,boolean);创建请求,method :填请求类型(get post),url :请求的地址, boolean:tru ...

  4. 18 12 07 MySQL 与python 的交互

    ---恢复内容开始--- python 中 关于SQL语句的查询 from pymysql import * # 由于只能用了一个MySQL 的包所以全部引进 def main(): # 创建Conn ...

  5. Win10下 Java环境变量配置

    安装java的JDK   下载地址 此电脑->属性->高级设置 "系统变量"新建   变量名:Java_Home   变量值:D:\Program Files\Java ...

  6. Java执行js加密算法

    Java执行js加密算法 今日需求:在后端执行一段加密算法,算法是js写的 明白需求以后疯狂百度.最后发现JDK提供了各种脚本的支持(怪笔者学艺不精,第一次见识到这个库,留下不学无术的泪水),正题开始 ...

  7. Java web实现综合查询+SQL语句拼接

    首先展示图形界: 界面比较简单,但麻雀虽小五脏俱全.因为数据库只有六种数据类型,所以最多添加六个查询框. 测试以下问题: 删除方式是从上往下开始的,如果删除之后会有问题.(后续改进ing) 若干个并且 ...

  8. D语言-变量、输入、输出、注释

    Part 1:变量 D语言的变量有很多类型,这里只讨论几个基本类型 §1.1变量的定义方法 在D语言中,变量的定义方法是这样子的: [typename] [var1,var2,var3...] 其中, ...

  9. 2014 3.22 校队选拔——A

    依然非常失望,我为什么现在还是那么弱,今天就做出了一道题,垫底. 一个大家都看出来的C题,我居然没找到规律,想了一会儿就放弃了. A题是这样的,有n种珍珠,给出这n种珍珠各自的数目,再给出一个M,表示 ...

  10. ZOJ 1276 DP

    给出一系列的1x2的矩阵,要你求出矩阵以什么样的次序相乘才使得相乘次数最少,.(不用排序,只要决定该矩阵是和前面相乘比较好,还是后面). 今天仔细想了一下,跟之前做的DP题目做了下对比,你比如说猴子堆 ...