ACM-ICPC 2018 徐州赛区网络预赛 Characters with Hash

这是一道水题,但是觉得其中寻找先导零使用的方法很好用,就决定写下来.用的是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 ;
}

发布了22 篇原创文章 · 获赞 58 · 访问量 7288
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章