校招算法笔面试 | 校招笔面试真题-一封奇怪的信

题目

题目链接

#题解
##题目难度:简单难度
##知识点:数组逻辑
#这道题有几点需要注意:
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&lt;26;i++){
		cin&gt;&gt;a[i];
	}
	string s;
	cin&gt;&gt;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&lt;<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];
	}

</count<<"></s.length();i++){>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值