这是一道水题,但是觉得其中寻找先导零使用的方法很好用,就决定写下来.用的是C
题目大意:
输入T组数据,每组数据输入一个根字母、一个数字n代表将要输入的字母的个数、n个连续字母,然后用根字母减去从左往右的每一个字母,得到的结果总共有几位最后就输出几。其中要除去先导零,首个字母减完后只有一位数就算一个,中间的若只有一位就算两个,若结果全是0,输出1。
举例:
12 34 56 输出:6
00 12 34 输出:4
01 23 45 输出:5
12 03 45 输出:6
00 00 00 输出:1
完整代码如下:
#include<stdio.h>
int main() {
int n ; //数据组数
scanf("%d", &n) ;
for(int i=0; i<n; i++) {
int len ; //输入的字母个数
int sum = 0 ; //记录结果,要赋初值0
char seed ; //根字母
char data[1000005] ; //存输入的字母,大小一般比要求超出5比较好
scanf("%d %c", &len, &seed) ; //中间要加空格,不然seed会直接存为空格然后闪退
scanf("%s", data) ;
for(int j=0; j<len; j++) {
if(seed == data[j] && sum==0) //字母和根字母相同相减为0,若sum为0则此时在数据开头,相减得到的0为先导零直接跳过即可
continue ;
else if(sum==0 && ((int)seed-data[j])<10) { //sum为0则此时在数据开头,并且相减位数只有一位则只加1
sum++ ;
continue ;
}
else //之后的全为中间数据,不管只有一位还是两位都加2
sum += 2 ;
}
if(sum == 0) //循环结束sum还是0则输出1
sum++ ;
printf("%d\n", sum) ;
}
return 0 ;
}