一封奇怪的信

一封奇怪的信

http://www.nowcoder.com/questionTerminal/d7764905e41a413c98900e22a9cc4ec3

题解

题目难度:简单难度

知识点:数组逻辑

这道题有几点需要注意:

1.将每个字母所占的宽度存放在数组a中,依次取出输入的字符串s中的每个字符,怎样与存放字符宽度的数组联系起来。通过int j=s[i]-’a’,例如是s[i]=’a’,那么j=0,或者S[i]=’c’,那么j=’c’-’a’,所以a[j]正好是字母c对应的宽度。

2.对该字符串依次统计宽度和,用sum表示。coun表示现在已经积累的层数。那么初始时sum=0,count=1。

3.判断当前sum与下一个字符所占宽度是否大于100,如果大于100,层数count++,这样操作,本次字符应该为下一行的首字符,所以sum=a[j];

#include<iostream>
using namespace std;
int a[26];
int main(){
    for(int i=0;i<26;i++){
        cin>>a[i];
    }
    string s;
    cin>>s;
    int sum=0;
    int count=1;
    for(int i=0;i<s.length();i++){
        int j=s[i]-'a';
        if(sum + a[j] >100) {
            sum=a[j];
            count++;
        }else sum+=a[j];
    }
    cout<<count<<" "<<sum<<endl;
    return 0;
}

【注】

我们也可以这样考虑当前sum与下一个字符所占宽度大于100,层数count++,sum从零开始重新计数,所以将其设置为0。但是由于For循环,本次字符将没有得到统计,那下一次循环要从当前i开始,所以此处需要添加一句i--。

for(int i=0;i<s.length();i++){
        int j=s[i]-'a';
        if(sum + a[j] >100) {
            sum=0;
            count++;
            i--;
        }else sum+=a[j];
    }
全部评论

相关推荐

11-27 12:43
已编辑
门头沟学院 C++
点赞 评论 收藏
分享
10-07 20:48
门头沟学院 Java
不敢追175女神:可能是实习上着班想到后面还要回学校给导师做牛马,看着身边都是21-25的年纪,突然emo了了
点赞 评论 收藏
分享
爱看电影的杨桃allin春招:我感觉你在炫耀
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务