问题标题: 酷町堂:1087 循环斐波那契字符串(Fibonacci)

0
0
已解决
龙舟
龙舟
高级光能
高级光能

题目描述 Description
大家都知道,斐波那契数列是从第2项开始,每一项都等于前两项之和。以此,我们定义循环斐波那契字符串:给定一个字符串,将原字符串的第一个字符的ASCII值加上第二个字符的ASCII值,得到循环斐波那契字符串的首个字符;将原字符串的第二个字符的ASCII值加上第三个字符的ASCII值,得到斐波那契字符串的第二个字符……以此类推,直到原字符串的倒数第二个字符。将原字符串的最后一个字符的ASCII值加上第一个字符的ASCII值,得到循环斐波那契字符串的最后一个字符。

输入描述 Input Description
输入为一行,包含一行字符串(长度在2~100之间)。且每个字符的ASCII值不大于63。

输出描述 Output Description
输出为一行,为变换后的循环斐波那契字符串。

样例输入 Sample Input
01234
样例输出 Sample Output
acegd
求思路,核心!


0
已采纳
王子健
王子健
初级天翼
初级天翼

你好,循环内部是这样的:

输入的是s,定义一个空串s1,存放最后的结果

思路:

如果是<size()-1的,正常算,因为题目说了将原字符串的第一个字符的ASCII值加上第二个字符的ASCII值,得到循环斐波那契字符串的首个字符,意思就是,这个字符的ASCII码加上下一个ASCII码值,就是s1[i] = s[i] + s[i+1](进行此运算时自动转为ASCII码,后面再次转回),但题目也说了直到原字符串的倒数第二个字符。将原字符串的最后一个字符的ASCII值加上第一个字符的ASCII值

就是else的时候,s1[i] = s[s.size()-1](最后一个字符)+ s[0] (第一个)

循环内部挨个输出就行了

2
被禁言 何冯成
何冯成
中级光能
中级光能
#include<iostream>
#include<string>
using namespace std;
int main()
{
    int i;
    string s,b;
  cin>>s;
    for(i=0;i<s.size();i++){
        if(i!=s.size()-1)
            b=s[i]+s[i+1];
        else
            b=s[0]+s[s.size()-1];
        cout<<b;
    }
return 0;
}

 

0
刘英杰
刘英杰
新手天翼
新手天翼

楼上的代码我借走了(狗头保命)

是这样的

定义两个字符串a和b

然后输入a(不用细说)

接着是最关键的一步

把i从0循环到a的测长度-2

每次都把a[i]+a[i+1]的值赋给b[i]

循环结束后,把a[0]+a[a.size()-1]赋给b[a.size()-1]

最后,输出b

0
褚俊皓
褚俊皓
新手天翼
新手天翼
核心
for(int i = 1 ; i < s.size() ; i ++)
       cout << char(s[i] + s[i-1]);

先输入

我要回答