1 条题解

  • 0
    @ 2025-4-14 18:45:31

    C++ :

    #include<iostream>
    #include<sstream>
    #include<cstring>
    #include<cstdio>
    #include<cstdlib>
    using namespace std;
    
    // 求An 
    void An(string &an, int i, int flag, int n)
    {
    	// an:字符串an
    	// i:用于循环1-n
    	// flag:用于记录序号
    	// n:题目中的n
    	
    	// itoa 的参数是字符类型指针,返回值是一个指针,指向的是一个字符串 
    	// N < 201故 
    	//char ch[4];
    	//itoa(i, ch, 10);
    	
    	// 用下面的流处理可以使代码更加清晰 
    	stringstream stream;  
        stream << i;  
        string string_temp = stream.str();   //此处也可以用 stream>>string_temp  
    	an += "sin(" + string_temp;
    	if(i < n)
    	{
    		// 符号 
    		if(flag)
    		{
    			an += "-";
    		}
    		else
    		{
    			an += "+";
    		}
    		flag = !flag;
    		
    		// 递归调用 
    		An(an, i+1, flag, n);
    	}
    	an += ")";
    }
    
    // 求Sn
    void Sn(string &te, int i, int n) 
    {
    	// te:存储结果的字符串 
    	
    	// 生成该层括号内的字符串 
    	string string_temp;
    	An(string_temp, 1, 1, i);
    	
    	// 将数字转换成字符 
    	stringstream stream;  
        stream << n-i+1;  
        string string_temp2 = stream.str();   //此处也可以用 stream>>string_temp
    	
    	string_temp +=  "+" + string_temp2;
    	
    	if(i > 1)
    	{
    		te = "(" + te;
    		Sn(te, i-1, n);
    	} 
    	
    	// 最外层没有)符号 
    	if(i == n)
    	{
    		te += string_temp;
    	}
    	else
    	{
    		te += string_temp +")";
    	}
    	
     
    }
    
    int main()
    {
    	string re;	// 结果字符串
    	
    	int n;
    	cin >> n;	
    	
    	// 递归从外层往里循环 
    	Sn(re, n, n);
    	
    	cout << re;
    	
    	return 0;
    }
    
    • 1

    信息

    ID
    3516
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者