不高兴的津津&标题统计&买铅笔(pencil)&ISBN号码

复制题目问题请不要理会

这题较简单 PASS

P1085 [NOIP2004 普及组] 不高兴的津津

题目描述

津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。

输入格式

输入包括 77 行数据,分别表示周一到周日的日程安排。每行包括两个小于 1010 的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。

输出格式

一个数字。如果不会不高兴则输出 00,如果会则输出最不高兴的是周几(用 1,2,3,4,5,6,71,2,3,4,5,6,7 分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。

输入输出样例

输入 #1复制

5 3
6 2
7 2
5 3
5 4
0 4
0 6

输出 #1复制

3

说明/提示

NOIP2004 普及组第 1 题

P 老师需要购买至少 5757 支铅笔。

如果她选择购买第一种包装,那么她需要购买 2929 份,共计 2×29=582×29=58 支,需要花费的钱为 2×29=582×29=58。

实际上,P 老师会选择购买第三种包装,这样需要买 22 份。虽然最后买到的铅笔数量更多了,为 30×2=6030×2=60 支,但花费却减少为 27×2=5427×2=54,比第一种少。

对于第二种包装,虽然每支铅笔的价格是最低的,但要够发必须买 22 份,实际的花费达到了 30×2=6030×2=60,因此 P 老师也不会选择。

所以最后输出的答案是 5454。

数据范围

保证所有的 7 个数都是不超过 10000 的正整数

  • 2021-10-27:增加一组 hack 数据
  • 2022-06-05:又增加一组 hack 数据
    #include<bits/stdc++.h>
    using namespace std;
    int y,x,maxl,maxi;
    int main()
    {
    	for(int i=1;i<=7;i++)
    	{
    		cin>>x>>y;
    		if(x+y>8)
    		{
    			if(x+y>maxl)
    			{
    				maxl=x+y;
    				maxi=i;
    			}
    		}
    	}
    	cout<<maxi;
    	return 0;
    }

    P5015 [NOIP2018 普及组] 标题统计

  • 题目背景

    NOIP2018 普及组 T1

    题目描述

    凯凯刚写了一篇美妙的作文,请问这篇作文的标题中有多少个字符? 注意:标题中可能包含大、小写英文字母、数字字符、空格和换行符。统计标题字符数时,空格和换行符不计算在内。

    输入格式

    输入文件只有一行,一个字符串 𝑠s。

    输出格式

    输出文件只有一行,包含一个整数,即作文标题的字符数(不含空格和换行符)。

    输入输出样例

    输入 #1复制

    234 

    输出 #1复制

    3

    输入 #2复制

    Ca 45 

    输出 #2复制

    4

    说明/提示

    样例 1 说明

    标题中共有 3 个字符,这 3 个字符都是数字字符。

    样例 2 说明

    标题中共有 55 个字符,包括 11 个大写英文字母, 11 个小写英文字母和 22 个数字字符, 还有 11 个空格。由于空格不计入结果中,故标题的有效字符数为 44 个。

    数据规模与约定

    规定 ∣𝑠∣∣s∣ 表示字符串 𝑠s 的长度(即字符串中的字符和空格数)。
    对于 40%40% 的数据,1≤∣𝑠∣≤51≤∣s∣≤5,保证输入为数字字符及行末换行符。
    对于 80%80% 的数据,1≤∣𝑠∣≤51≤∣s∣≤5,输入只可能包含大、小写英文字母、数字字符及行末换行符。
    对于 100%100% 的数据,1≤∣𝑠∣≤51≤∣s∣≤5,输入可能包含大、小写英文字母、数字字符、空格和行末换行符。

  • #include<bits/stdc++.h>
    using namespace std; 
    string s;int ans;
    int main()
    {
    	while(cin>>s)
    	{
    		ans+=s.size();
    	}
    	cout<<ans;
    	return 0;
    }

    聪明一点,特殊字符只有空格和换行符

  • 没必要老老实实读入整行数据

  • 直接不停cin>>s   会过滤掉空格和换行符的

  • 1567. 买铅笔(pencil)

  • 题目背景

    NOIP2016 普及组 T1

    题目描述

    P 老师需要去商店买 𝑛n 支铅笔作为小朋友们参加 NOIP 的礼物。她发现商店一共有 33 种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同。为了公平起 见,P 老师决定只买同一种包装的铅笔。

    商店不允许将铅笔的包装拆开,因此 P 老师可能需要购买超过 𝑛n 支铅笔才够给小朋友们发礼物。

    现在 P 老师想知道,在商店每种包装的数量都足够的情况下,要买够至少 𝑛n 支铅笔最少需要花费多少钱。

    输入格式

    第一行包含一个正整数 𝑛n,表示需要的铅笔数量。

    接下来三行,每行用 22 个正整数描述一种包装的铅笔:其中第 11 个整数表示这种包装内铅笔的数量,第 22 个整数表示这种包装的价格。

    保证所有的 77 个数都是不超过 1000010000 的正整数。

    输出格式

    11 个整数,表示 P 老师最少需要花费的钱。

    输入输出样例

    输入 #1复制

    57
    2 2
    50 30
    30 27

    输出 #1复制

    54

    输入 #2复制

    9998
    128 233
    128 2333
    128 666

    输出 #2复制

    18407

    输入 #3复制

    9999
    101 1111
    1 9999
    1111 9999

    输出 #3复制

    89991

    说明/提示

    铅笔的三种包装分别是:

  • 22 支装,价格为 22;
  • 5050 支装,价格为 3030;
  • 3030 支装,价格为 2727。
  •     #include<cstdio>
        using namespace std;
        int i,j,k,n,m,w,ans;
        int main(){
            scanf("%d",&n);
            for(i=0;i<3;i++){
                scanf("%d%d",&j,&k);m=j;w=k;//输入并存下初始的价格与数量
                while(j<n){j<<=1;k<<=1;}//价格与数量不断*2直到数量大于n
                while(j>n){j-=m;k-=w;}//*2有可能导致买太多了,减去一些
                while(j<n){j+=m;k+=w;}//减去之后又可能太少了,加上一些
                //其实就是大幅度地上调,然后做一些微调
                if(k<ans||ans==0)ans=k;//判断是否是最小花费
            }
            printf("%d\n",ans);
            return 0;//输出并返回
        }

    P1055 [NOIP2008 普及组] ISBN 号码

  • 每一本正式出版的图书都有一个 ISBN 号码与之对应,ISBN 码包括 99 位数字、11 位识别码和 33 位分隔符,其规定格式如 x-xxx-xxxxx-x,其中符号 - 就是分隔符(键盘上的减号),最后一位是识别码,例如 0-670-82162-4就是一个标准的 ISBN 码。ISBN 码的首位数字表示书籍的出版语言,例如 00 代表英语;第一个分隔符 - 之后的三位数字代表出版社,例如 670670 代表维京出版社;第二个分隔符后的五位数字代表该书在该出版社的编号;最后一位为识别码。

    识别码的计算方法如下:

    首位数字乘以 1 加上次位数字乘以 2 ……以此类推,用所得的结果  mod 11mod11,所得的余数即为识别码,如果余数为 1010,则识别码为大写字母 𝑋X。例如 ISBN 号码 0-670-82162-4 中的识别码 44 是这样得到的:对 067082162 这 99 个数字,从左至右,分别乘以 1,2,…,91,2,…,9 再求和,即 0×1+6×2+……+2×9=1580×1+6×2+……+2×9=158,然后取 158 mod 11158mod11 的结果 44 作为识别码。

    你的任务是编写程序判断输入的 ISBN 号码中识别码是否正确,如果正确,则仅输出 Right;如果错误,则输出你认为是正确的 ISBN 号码。

    输入格式

    一个字符序列,表示一本书的 ISBN 号码(保证输入符合 ISBN 号码的格式要求)。

    输出格式

    一行,假如输入的 ISBN 号码的识别码正确,那么输出 Right,否则,按照规定的格式,输出正确的 ISBN 号码(包括分隔符 -)。

    输入输出样例

    输入 #1复制

    0-670-82162-4

    输出 #1复制

    Right

    输入 #2复制

    0-670-82162-0

    输出 #2复制

    0-670-82162-4

    说明/提示

    2008 普及组第一题

  • #include<bits/stdc++.h>
    using namespace std;
    string s;long long x,sb,t;
    int main()
    {
    	cin>>s;
    	for(int i=0;i<s.size()-1;i++)if(s[i]>='0'&&s[i]<='9')x+=((s[i]-'0')*++t);
    	if(s[s.size()-1]=='X')sb=10;
    	else sb=s[s.size()-1]-'0';
    	if(x%11==sb)cout<<"Right";
    	else
    	{
    		for(int i=0;i<s.size()-1;i++)cout<<s[i];
    		if(x%11==10)cout<<"X";
    		else cout<<x%11;
    	} 
    	return 0;
    }

    第一个for--首位数字乘以 1 加上次位数字乘以 2

  • 如果最后一位是X  那么就验证码=10

  • 24
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值