• Timus 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+1
    For given N print SN

    Input

    One integer N. 1 ≤ N ≤ 200

    Output

    Line containing SN

    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; }


    最后的执行时间是差点儿相同的。



  • 相关阅读:
    chown
    [NOI2010]航空管制
    批量kill 某个用户session
    【BZOJ2395】【Balkan 2011】Timeismoney 最小乘积生成树
    找出 alter system kill session ‘sid,serial#’ kill 掉的数据库会话对应进程
    [NOI2016]优秀的拆分
    Oracle12C查询自建用户(非系统自带)
    查询包含某个字段的表
    [WC2011]最大XOR和路径
    监控慢SQL
  • 原文地址:https://www.cnblogs.com/mthoutai/p/6729778.html
Copyright © 2020-2023  润新知