Timus 1149. Sinus Dances 打印复杂公式
就是打印以下这两个复杂的式子:
Let Sn = (…(A1+n)A2+n–1)A3+…+2)An+1
For given N print SN
Input
Output
Sample
input | output |
---|---|
3 |
((sin(1)+3)sin(1–sin(2))+2)sin(1–sin(2+sin(3)))+1 |
一看就知道须要使用递归打印了。关键是怎样安排好递归才干精确地打印,
以下两个函数分别处理两个式子,综合起来得到答案。
当中注意添加mItoS这个函数是必要的,由于当n >= 10的时候。那么就不能直接转换成为char了。
#include <string>
#include <vector>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <map>
using namespace std; string mItoS(int n)
{
string s;
while (n)
{
s.push_back(n % 10 + '0');
n /= 10;
}
reverse(s.begin(), s.end());
return s;
} string printAn(int n)
{
if (n < 1) return "";
if (1 == n) return "sin(1)";
string s = printAn(n-1); string s2;
if ((n-1) % 2)
{
s2 = "-sin(";
}
else s2 = "+sin("; s2 += mItoS(n);
s2.push_back(')'); s.insert(s.end() - (n-1), s2.begin(), s2.end());
return s;
} string printSn(int n, int c = 1)
{
if (1 == n)
{
string s;
s.append(c-1, '(');
s += printAn(1);
s.push_back('+');
s += mItoS(c);
return s;
}
string s = printSn(n-1, c+1); s.push_back(')');
s += printAn(n);
s.push_back('+');
s += mItoS(c);
return s;
} void SinusDances1149()
{
int n = 0;
cin>>n;
cout<<printSn(n);
}
有人不使用递归也做到了。只是那样更难想到了,由于要观察当中的规律,更加复杂,只是他的代码更加简洁,以下是她论坛上找到的程序:
#include<stdio.h>
int mainSinus()
{
int n,i,j;
scanf("%i",&n);
for(i=1;i<n;i++) printf("(");
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
{
if(j>1)
printf((j&1)? "+":"-");
printf("sin(%i",j);
}
for(j=1;j<=i;j++)printf(")");
printf("+%i",n+1-i);
if(i!=n)printf(")");
}
return 0;
}
最后的执行时间是差点儿相同的。
Timus 1149. Sinus Dances 打印复杂公式的更多相关文章
- Ural 1149 - Sinus Dances
Let An = sin(1–sin(2+sin(3–sin(4+…sin(n))…)Let Sn = (…(A1+n)A2+n–1)A3+…+2)An+1For given N print SN I ...
- 模拟 URAL 1149 Sinus Dances
题目传送门 /* 模拟:找到规律分别输出就可以了,简单但是蛮有意思的 */ #include <cstdio> #include <algorithm> #include &l ...
- Python怎么打印彩色字符串
print 也许是我们在使用 Python 的时候用的最多的一种操作,但是经常发现很多人可以打印彩色文本,这种操作是怎么得到的呢? 一行代码突出重点内容 现在我们通过一个例子,说明彩色文本怎么打印.先 ...
- 07_Java基础语法_第7天(练习)_讲义
今日内容介绍 1.循环练习 2.数组方法练习 01奇数求和练习 * A: 奇数求和练习 * a: 题目分析 * 为了记录累加和的值,我们需要定义一个存储累加和的变量 * 我们要获取到1-100范围内的 ...
- 07_java之练习题
01奇数求和练习 * A: 奇数求和练习 * a: 题目分析 * 为了记录累加和的值,我们需要定义一个存储累加和的变量 * 我们要获取到1-100范围内的数 * 判断当前数是否为奇数,是奇数,完成累加 ...
- 第7天 Java基础语法
第7天 Java基础语法 今日内容介绍 循环练习 数组方法练习 循环练习 编写程序求 1+3+5+7+……+99 的和值. 题目分析: 通过观察发现,本题目要实现的奇数(范围1-100之间)的累加和. ...
- Java基础语法(练习)
Java基础语法 今日内容介绍 u 循环练习 u 数组方法练习 第1章 循环练习 1.1 编写程序求 1+3+5+7+……+99 的和值. 题目分析: 通过观察发现,本题目要实现的奇数(范围1-100 ...
- js用for循环实现乘法口诀表
for循环可以打印一个乘法口诀表.需要使用for循环的嵌套 <script> for(var i = 0; i <= 9; i++){ // 外层循环控制行数,外层循环执行一次,内层 ...
- Python科学计算库SymPy初探
SymPy基础应用 .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { bord ...
随机推荐
- linux普通用户获取管理员权限
原文:http://www.cnblogs.com/likwo/p/3435404.html 测试环境:CentOS 5.5 1.添加用户,首先用adduser命令添加一个普通用户,命令如下: #ad ...
- Openfire 服务器更换ip后的恢复方法
如果你的服务器名称和mysql的地址都是使用的静态ip地址配置的,更改ip后,openfire就会开启失败,这种情况下请看下面的解决方法. 比如你的ip地址由 192.168.0.111 改为192. ...
- ios的一些知识点
ios的一些知识点 一 非ARC的内存管理情况 1-autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段落,开 ...
- 安装arcgis10.5不能启动服务的解决方案转
柚子的二分口粮地 来自:http://www.cnblogs.com/youzi-xuchongyou/p/7218422.html 安装arcgis10.5不能启动服务的解决方案 最近由于公司需要, ...
- 安卓下查看kmsg内核日志
cat /proc/kmsg <6>[ 2601.360] c0@A7 lm3695_early_suspend 247<6>[ 2601.380] c1@A7 gp2ap_e ...
- [PHP] ubuntu16.04配置Lamp环境(搭建linux+apache+mysql+php7环境)
reference : http://blog.csdn.net/Abyss_sliver/article/details/77621404 好久没有在Linux环境下进行开发了,比较常用的还是win ...
- 混沌数学之Henon吸引子
Henon吸引子是混沌与分形的著名例子. 相关软件:混沌数学及其软件模拟相关代码: // http://wenku.baidu.com/view/d51372a60029bd64783e2cc0.ht ...
- 我所遭遇过的游戏中间件---SpeedTree
我所遭遇过的游戏中间件---SpeedTree SpeedTree是一个专门用于渲染植被的中间件,并提供了一套完善的植物编辑工具.在它官方提供的DEMO中,你会看到高度逼真的树木和植物,在风的影响下树 ...
- [leetcode]Binary Tree Preorder Traversal @ Python
原题地址:http://oj.leetcode.com/problems/binary-tree-preorder-traversal/ 题意:这题用递归比较简单.应该考察的是使用非递归实现二叉树的先 ...
- js list数据 转 树状 层级 JSON,递归生成树状 层级 JSON
<!DOCTYPE html> <html> <head> <script> var data=[ {"id":"aaa& ...