洛谷刷题C语言:梦中的统计、统计天数、语句解析、爱与愁的心痛、西游记公司

记录洛谷刷题QAQ


一、梦中的统计

题目背景

Bessie 处于半梦半醒的状态。过了一会儿,她意识到她在数数,不能入睡。

题目描述

Bessie 的大脑反应灵敏,仿佛真实地看到了她数过的一个又一个数。她开始注意每一个数码( 0 … 9 0 \ldots 9 09):每一个数码在计数的过程中出现过多少次?

给出两个整数 M M M N N N,求每一个数码出现了多少次。

输入格式

1 1 1 行: 两个用空格分开的整数 M M M N N N

输出格式

1 1 1 行: 十个用空格分开的整数,分别表示数码 0 … 9 0 \ldots 9 09 在序列中出现的次数。

样例 #1

样例输入 #1

129 137

样例输出 #1

1 10 2 9 1 1 1 1 0 1

提示

数据保证, 1 ≤ M ≤ N ≤ 2 × 1 0 9 1 \leq M \leq N \leq 2 \times 10^9 1MN2×109 N − M ≤ 5 × 1 0 5 N-M \leq 5 \times 10^5 NM5×105

代码如下

 
#include<stdio.h>
#include<math.h>
#include <stdlib.h>

int main(){
	int i,n1,n2,b;
	int a[10]={0};
	scanf("%d %d",&n1,&n2);
	for(i=n1;i<=n2;i++){
		int num=i;
		while(num>0){
			b=num%10;
			num=num/10;
			a[b]++;
		}
	}
	for(i=0;i<10;i++){
		printf("%d ",a[i]);
	}
	return 0;
} 

二、统计天数

题目描述

炎热的夏日,KC 非常的不爽。他宁可忍受北极的寒冷,也不愿忍受厦门的夏天。最近,他开始研究天气的变化。他希望用研究的结果预测未来的天气。

经历千辛万苦,他收集了连续 N ( 1 ≤ N ≤ 1 0 6 ) N(1 \leq N \leq 10^6) N(1N106) 的最高气温数据。

现在,他想知道最高气温一直上升的最长连续天数。

输入格式

第 1 行:一个整数 N N N 1 ≤ N ≤ 1 0 6 1 \leq N \leq 10^6 1N106

第 2 行: N N N个空格隔开的整数,表示连续 N N N 天的最高气温。 0 ≤ 0 \leq 0 最高气温 ≤ 1 0 9 \leq 10^9 109

输出格式

1 行:一个整数,表示最高气温一直上升的最长连续天数。

样例 #1

样例输入 #1

10
1 2 3 2 4 5 6 8 5 9

样例输出 #1

5

代码如下

#include<stdio.h>
int main(){
    int n,i,sum=1,count=1;
    scanf("%d",&n);
    int a[n];
    for(i=0;i<n;i++)
    	scanf("%d",&a[i]);
    for(i=0;i<n-1;i++)
    {
       if(a[i+1]>a[i])
       {
           count++;    //count记录每次最长的温度升高
           if(count>sum)    //sum为最大的
               sum=count;
        }
       else 
          count=1;

    }
    printf("%d",sum);
    return 0;
}

三、语句解析

题目背景

木有背景……

题目描述

一串长度不超过 255 255 255 的 PASCAL 语言代码,只有 a , b , c a,b,c a,b,c 三个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变量,每条赋值语句的格式是 [变量]:=[变量或一位整数];。未赋值的变量值为 0 0 0 输出 a , b , c a,b,c a,b,c 的值。

输入格式

一串符合语法的 PASCAL 语言,只有 a , b , c a,b,c a,b,c 三个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变量,未赋值的变量值为 0 0 0

输出格式

输出 a , b , c a,b,c a,b,c 最终的值。

样例 #1

样例输入 #1

a:=3;b:=4;c:=5;

样例输出 #1

3 4 5

提示

输入的 PASCAL 语言长度不超过 255 255 255

代码如下

#include <stdio.h>
#include <stdlib.h>

#include <string.h>
 
int main()
{
    int a = 0, b = 0, c = 0;
    char s[300];
    scanf("%s", s);
    int len = strlen(s);
    for(int i = 0; i < len; i+=5)
    {
        if(s[i] == 'a')
        {
            if(s[i+3] == 'a')
                a = a;
            else if(s[i+3] == 'b')
                a = b;
            else if(s[i+3] == 'c')
                a = c;
            else
                a = s[i+3] - '0';
        }
        if(s[i] == 'b')
        {
            if(s[i+3] == 'a')
                b = a;
            else if(s[i+3] == 'b')
                b = b;
            else if(s[i+3] == 'c')
                b = c;
            else
                b = s[i+3] - '0';
        }
        if(s[i] == 'c')
        {
            if(s[i+3] == 'a')
                c = a;
            else if(s[i+3] == 'b')
                c = b;
            else if(s[i+3] == 'c')
                c = c;
            else
                c = s[i+3] - '0';
        }
    }
    printf("%d %d %d\n", a, b, c);
 
    return 0;
}

四、爱与愁的心痛

题目背景

(本道题目隐藏了两首歌名,找找看哪~~~)

《爱与愁的故事第一弹·heartache》第一章。

《我为歌狂》当中伍思凯神曲《舞月光》居然没赢给萨顶顶,爱与愁大神心痛啊~~~而且最近还有一些令人伤心的事情,都让人心痛(最近真的很烦哈)……

题目描述

最近有 n n n 个不爽的事,每句话都有一个正整数刺痛值(心理承受力极差)。爱与愁大神想知道连续 m m m 个刺痛值的和的最小值是多少,但是由于业务繁忙,爱与愁大神只好请你编个程序告诉他。

输入格式

第一行有两个用空格隔开的整数,分别代表 n n n m m m

2 2 2 到第 ( n + 1 ) (n + 1) (n+1) 行,每行一个整数,第 ( i + 1 ) (i + 1) (i+1) 行的整数 a i a_i ai 代表第 i i i 件事的刺痛值 a i a_i ai

输出格式

输出一行一个整数,表示连续 m m m 个刺痛值的和的最小值是多少。

样例 #1

样例输入 #1

8 3
1
4
7
3
1
2
4
3

样例输出 #1

6

提示

数据规模与约定
  • 对于 30 % 30\% 30% 的数据,保证 n ≤ 20 n \leq 20 n20
  • 对于 60 % 60\% 60% 的数据,保证 n ≤ 100 n \leq 100 n100
  • 对于 90 % 90\% 90% 的数据,保证 n ≤ 1 0 3 n \leq 10^3 n103
  • 对于 100 % 100\% 100% 的数据,保证 0 ≤ m ≤ n ≤ 3 × 1 0 3 0 \leq m \leq n \leq 3 \times 10^3 0mn3×103 1 ≤ a i ≤ 100 1 \leq a_i \leq 100 1ai100

代码如下


#include <stdio.h>
#include <stdlib.h>
#define M 300000
int main(int argc, char *argv[]) {
	int n, m;
	scanf("%d%d",&n,&m);
		int NUM[M];
		int i, j;
		for(i = 0;i < n;i++){
			scanf("%d",&NUM[i]); 
		} 
		long long int sum = 0, all = 1000000;
		for(i = 0;i < n-m+1;i++){
			for(j = i;j < m+i;j++){
				sum  = NUM[j] + sum;
				}
				if(sum < all){
					all = sum;	
			}
			sum = 0;
		}
		printf("%lld",all); 
	return 0;
}

五、西游记公司

题目背景

一道极其无厘头的题目

题目描述

事情是这样的:西游记中的孙沙猪(孙杀猪)三徒弟在西天取经之后开始进入厦门大学经贸系学习经济,在1个小时的学习后,他们用暴力手段毕业了。然后,他们创办了三个公司——“花果山生态旅游山庄集团公司”“高老庄猪肉美食城有限公司”“流沙河轮渡有限公司”。虽然这三家公司出自“经卷出版社”社长唐三藏的徒弟们,但是仍然保持着0元以下的财政收入。于是,他们想到了一个无聊的方法——向别人偷!是这样的:如果猪八戒知道孙悟空要偷猪八戒的平底锅,猪八戒就不能去抢沙和尚的保时捷。现在,作为猪八戒手下首席智士(智障人士)的你,要帮助既聪明又愚蠢的猪八戒用那种不正当的手段挽救这个公司!你可以这样做:你已经知道孙悟空什么时候要来偷猪八戒的东西,而猪八戒又要在什么时间去抢沙和尚的东西,又知道猪八戒每秒钟可以偷沙和尚1台笔记本电脑,帮猪八戒算一算,自己在有限的时间内能偷到沙和尚多少台电脑,使得他有足够的时间来防御大师兄。

输入格式

第一行:时:分:秒(表示猪八戒打算去偷沙和尚笔记本电脑的时间)

第二行:时:分:秒(表示孙悟空打算去偷猪八戒平底锅的时间)

注:时间可能有前导0,也有可能没有。

第三行:猪八戒每秒可以偷沙和尚几台笔记本电脑

确保第一行的时间要比第二行的时间来得早。

输出格式

一个整数,有可能大于int(2^31-2),表示猪八戒能偷沙和尚笔记本的个数

样例 #1

样例输入 #1

00:0:00
0:00:10
10

样例输出 #1

100

提示

数据范围:

00:00:00到23:59:59

数量<=32767

代码如下:

 
#include<stdio.h>
#include<math.h>
#include <stdlib.h>

int main(){
	int a1, a2, a3;
	int b1, b2, b3;
	int n;
	scanf("%d:%d:%d",&a1,&a2,&a3);
	scanf("%d:%d:%d",&b1,&b2,&b3);
	scanf("%d",&n);	
	
	long long num = 0;
	num = b1*3600+b2*60+b3 - a1*3600 - a2*60 - a3;
	num = num*n;
	
	printf("%lld\n",num);
	return 0;
} 
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值