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 ...
随机推荐
- windows设置共享
设置共享: 添加用户 点击添加 设置权限 然后别人就可以查看了. 查看共享: 删除共享:
- 正则表达式校验15/18位生份证-JAVA版
public static boolean isIDNumber(String iDNumber) { if (iDNumber == null || "".equals(iDNu ...
- 服务信息块协议 SMB(Server Message Block protocol)
SMB(Server Message Block)是协议名,它能被用于Web连接和客户端与服务器之间的信息沟通. SMB协议 SMB最初是IBM的贝瑞·费根鲍姆(Barry Feigenbaum)研制 ...
- poj 3041 Asteroids 题解
Asteroids Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20686 Accepted: 11239 Descr ...
- [转]linux sort 命令详解
原文网址:http://www.cnblogs.com/51linux/archive/2012/05/23/2515299.html 1 sort的工作原理 sort将文件的每一行作为一个单位,相互 ...
- Python并发编程-Redis
Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Remote Dictionary Server(Redis)是一个基于 key-value ...
- python环境搭建-Pycharm模块安装方法
不懂直接看图顺序操作: 方法一: 方法二:
- unity forward renderer的 base pass rt设置
一般他都是用 RenderTexture::SetActive()来设置rt 但是 forward path 的opaque我跟了好久找不到这个setactive 在dorender之前有setupR ...
- C# 音频操作系统项目总结
此项目需求是针对.wav格式音频进行操作,转换成相应的.mp3格式的音频文件,对音频进行切割,最后以需求的形式输出,此篇会回顾运用到的一些知识点. 1.MDI子窗口的建立: 首先一个窗体能够创建多个M ...
- javascript格式化json显示
// Example usage: http://jsfiddle.net/q2gnX/ var formatJson = function(json, options) { var reg = nu ...