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. DevOps专题|基础Agent部署系统

    随着京东云业务规模.管理机器规模的扩大,各类agent也在逐渐增多,如日志agent.监控agent.控制系统agent等.这对agent的部署.升级.状态维护提出了很高的要求,一旦某个全局agent ...

  2. 尝试用kotlin做一个app(写在前面)

    学kotlin的目的好像就是做一个app,不一定有什么想做的项目,只是单纯想掌握这一门技术,确切地说只是单纯想学会做app.对于概念的东西,我也没兴趣深究,用得到的学一下,用不到的,就算了.我也不知道 ...

  3. [CISCN 2019 初赛]Love Math

    0x00 知识点 PHP函数: scandir() 函数:返回指定目录中的文件和目录的数组. base_convert() 函数:在任意进制之间转换数字. dechex() 函数:把十进制转换为十六进 ...

  4. POJ - 3660 Cow Contest(flod)

    题意:有N头牛,M个关系,每个关系A B表示编号为A的牛比编号为B的牛强,问若想将N头牛按能力排名,有多少头牛的名次是确定的. 分析: 1.a[u][v]=1表示牛u比牛v强,flod扫一遍,可以将所 ...

  5. opencv3。4安装出错

    https://www.samontab.com/web/2017/06/installing-opencv-3-2-0-with-contrib-modules-in-ubuntu-16-04-lt ...

  6. 进度3_家庭记账本App_Fragment使用SQLite实现简单存储及查询

    AddFragment.java: package com.example.familybooks; import android.content.ContentValues; import andr ...

  7. Python时间问题

    获取当前的时间,time只能精确到秒,而datetime可以精确到毫秒,所以使用格式化的时候要注意. nowTime=time.localtime((time.time())) t=time.strf ...

  8. 吴裕雄--天生自然TensorFlow2教程:前向传播(张量)- 实战

    手写数字识别流程 MNIST手写数字集7000*10张图片 60k张图片训练,10k张图片测试 每张图片是28*28,如果是彩色图片是28*28*3-255表示图片的灰度值,0表示纯白,255表示纯黑 ...

  9. one_day_one_linuxCmd---tar命令

    <坚持每天学习一个 linux 命令,今天我们来学习 tar 命令> 摘要:tar 命令是一个 Linux 下的打包程序,通常在 Linux 下,打包和压缩是不同的程序,打包通过 tar ...

  10. vue 插槽 part3

    f vue中的插槽 1.<slot>默认内容</slot> 当副组件不传递信息的时候 显示默认内容 2.<slot></slot> 显示的是插槽中所有的 ...