首页 > 其他分享 >PAT Basic 1039. 到底买不买

PAT Basic 1039. 到底买不买

时间:2023-03-20 15:23:24浏览次数:36  
标签:zhu1 PAT int res negative 珠串 珠子 1039 Basic

PAT Basic 1039. 到底买不买

1. 题目描述:

小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。

为方便起见,我们用[0-9]、[a-z]、[A-Z]范围内的字符来表示颜色。例如在图1中,第3串是小红想做的珠串;那么第1串可以买,因为包含了全部她想要的珠子,还多了8颗不需要的珠子;第2串不能买,因为没有黑色珠子,并且少了一颗红色的珠子。

figbuy.jpg

图 1

2. 输入格式:

每个输入包含 1 个测试用例。每个测试用例分别在 2 行中先后给出摊主的珠串和小红想做的珠串,两串都不超过 1000 个珠子。

3. 输出格式:

如果可以买,则在一行中输出 Yes 以及有多少多余的珠子;如果不可以买,则在一行中输出 No 以及缺了多少珠子。其间以 1 个空格分隔。

4. 输入样例:

ppRYYGrrYBR2258
YrR8RrY
ppRYYGrrYB225
YrR8RrY

5. 输出样例:

Yes 8
No 2

6. 性能要求:

Code Size Limit
16 KB
Time Limit
150 ms
Memory Limit
64 MB

思路:

判断输入字符串和目标字符串的包含关系,统计出每个字符出现的次数即可,这里我当时定义了一个结构体Zhuzi用于记录珠串。由于统计个数要确保初值为零,在这里学到了结构体的初始化方法。

My Code:

#include <stdio.h>

typedef struct zhuzi
{
    int digits[10];
    int lower[26];
    int upper[26];
} Zhuzi;

int main(void)
{
    Zhuzi zhu1 = {{0}, {0}, {0}}; // here study the initialization of struct
    Zhuzi zhu2 = {{0}, {0}, {0}}; // also can initialize out of order
    char have[1001] = "", need[1001] = "";
    char *pchar = NULL;
    int i = 0; //, res = 0;
    //int flag = 0; // 0: can buy, 1: can't buy
    int res_positive = 0, res_negative = 0;
    
    scanf("%s%s", have, need);
    
//     printf("%s\n%s\n", have, need);
//     for(int i=0; i<26; i++)
//     {
//         printf("%d ", zhu1.lower[i]);
//     }
    
    pchar = have;
    while(*pchar)
    {
        if(*pchar >= '0' && *pchar <= '9') //digits
        {
            zhu1.digits[*pchar-'0']++;
        }
        else if(*pchar >= 'a' && *pchar <= 'z') //lower
        {
            zhu1.lower[*pchar-'a']++;
        }
        else //upper
        {
            zhu1.upper[*pchar-'A']++;
        }
        
        pchar++;
    }
    
    pchar = need;
    while(*pchar)
    {
        if(*pchar >= '0' && *pchar <= '9') //digits
        {
            zhu2.digits[*pchar-'0']++;
        }
        else if(*pchar >= 'a' && *pchar <= 'z') //lower
        {
            zhu2.lower[*pchar-'a']++;
        }
        else //upper
        {
            zhu2.upper[*pchar-'A']++;
        }
        
        pchar++;
    }
    
    for(i=0; i<10; i++)
    {
        zhu1.digits[i] -= zhu2.digits[i];
        
        if(zhu1.digits[i] >= 0)
            res_positive += zhu1.digits[i];
        else
            res_negative += zhu1.digits[i];
        //res += zhu1.digits[i];
    }
    for(i=0; i<26; i++)
    {
        zhu1.lower[i] -= zhu2.lower[i];
        zhu1.upper[i] -= zhu2.upper[i];
        
        if(zhu1.lower[i] >= 0)
            res_positive += zhu1.lower[i];
        else
            res_negative += zhu1.lower[i];
        
        if(zhu1.upper[i] >= 0)
            res_positive += zhu1.upper[i];
        else
            res_negative += zhu1.upper[i];
        
        //res += zhu1.lower[i];
        //res += zhu1.upper[i];
    }
    
    if(!res_negative)
    {
        printf("Yes %d", res_positive);
    }
    else
    {
        printf("No %d", -res_negative);
    }
    printf("\n");
    
    return 0;
}

标签:zhu1,PAT,int,res,negative,珠串,珠子,1039,Basic
From: https://www.cnblogs.com/tacticKing/p/17236394.html

相关文章

  • 0 selenium 、登录cnblogs、 1 抽屉半自动点赞 、2 xpath的使用、 3 selenium 动作链
    目录0selenium登录cnblogs1抽屉半自动点赞2xpath的使用3selenium动作链3.1动作链案例4自动登录123065打码平台使用6使用打码平台自动登录7使用selenium爬取京东......
  • 单选多选触发label的两次点击事件,label默认向input分派(dispatch)一次点击事件
    <template><!--<divclass="hello">hi</div>--><div><labelfor="a"@click="(e)=>{fun4(e);}"......
  • [pat乙]1086 就不告诉你
    1086就不告诉你(15分)做作业的时候,邻座的小盆友问你:“五乘以七等于多少?”你应该不失礼貌地围笑着告诉他:“五十三。”本题就要求你,对任何一对给定的正整数,倒着输出它们的乘积......
  • [pat乙]1007 素数对猜想
    1007素数对猜想(20分)让我们定义dn为:dn=pn+1-pn,其中pi是第i个素数。显然有d1=1且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”......
  • [pat乙]1021. 个位数统计
    1021.个位数统计(15)给定一个k位整数N=dk-110k-1+…+d1101+d0(0<=di<=9,i=0,…,k-1,dk-1>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定N=1......
  • [pat乙]1022 D进制的A+B
    1022D进制的A+B(20分)输入两个非负10进制整数A和B(≤2​30​​−1),输出A+B的D(1<D≤10)进制数。输入格式:输入在一行中依次给出3个整数A、B和D。......
  • [pat乙]1023. 组个最小数
    1023.组个最小数(20)给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个......
  • [pat乙]1032 挖掘机技术哪家强
    1032挖掘机技术哪家强(20)(20分)为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。输入格式:输入在......
  • [pat乙]1013 数素数
    1013数素数(20分)算法标签:欧拉筛1013数素数(20分)令P​i​​表示第i个素数。现任给两个正整数M≤N≤10​4​​,请输出P​M​​到P​N​​的所有素数。......
  • [pat乙]1015 德才论
    1015德才论(25分)宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不......