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 ...
随机推荐
- Iptables 指南 1.1.19
Iptables 指南 1.1.19 Oskar Andreasson oan@frozentux.net Copyright © 2001-2003 by Oskar Andreasson 本文在符 ...
- win7下安装配置ftp服务器
1. win7操作系统自带了ftp组件,所以不需要另外下载.只需要在控制面板中,添加或删除组件中启用即可. 2. 在管理上,ftp和iis是属于同一个目录的.ftp也可以算是internet info ...
- mac OS X下配置jdk环境变量
进入命令行,开始如下操作: cd ~touch.bash_profile vi .bash_profile 输入内容jdk变量配置内容: export JAVA_HOME=/Library/Jav ...
- Log4j按级别输出日志到不同文件配置分析
关于LOG4J 按照级别输出日志,并按照级别输出到不同文件中的说法有很多, 网上贴的最多的log4j.properties的设置是这样的 log4j.rootLogger=info,stdout,in ...
- Jquery焦点图/幻灯片效果 插件 KinSlideshow
JavaScript $(function(){ $("#KinSlideshow").KinSlideshow({ moveSty ...
- oracle转义符
要使用_,则需要做如下转义 select column_name from user_tab_columns where table_name = 'SYS_TERMINAL_MAPPING' AND ...
- Apache2.2.16+PHP5.3.3+MySQL5.1.49的配置方法
第一步:下载安装的文件 1. MySQL:下载地址mysql-5.1.49-win32.msi: 2. Apache: 下载地址httpd-2.2.16-win32-x86-openssl-0.9.8 ...
- #line 的作用是改变当前行数和文件名称
#line 的作用是改变当前行数和文件名称,它们是在编译程序中预先定义的标识符命令的基本形式如下: #line number["filename"]其中[]内的文件名可以省略. ...
- 内存控制篇calloc free getpagesize malloc mmap munmap
calloc(配置内存空间) 相关函数 malloc,free,realloc,brk 表头文件 #include <stdlib.h> 定义函数 void *calloc(size_t ...
- flume 日志导入elasticsearch
Flume配置 . flume生成的数据结构 <span style="font-size:18px;">"_index" : "logs ...