首页 > 其他分享 >PAT Basic 1069. 微博转发抽奖

PAT Basic 1069. 微博转发抽奖

时间:2023-04-05 09:56:41浏览次数:45  
标签:1069 PAT int MAX 转发 LEN char 中奖 Basic

PAT Basic 1069. 微博转发抽奖

1. 题目描述:

小明 PAT 考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔 N 个人就发出一个红包。请你编写程序帮助他确定中奖名单。

2. 输入格式:

输入第一行给出三个正整数 M(≤ 1000)、N 和 S,分别是转发的总量、小明决定的中奖间隔、以及第一位中奖者的序号(编号从 1 开始)。随后 M 行,顺序给出转发微博的网友的昵称(不超过 20 个字符、不包含空格回车的非空字符串)。

注意:可能有人转发多次,但不能中奖多次。所以如果处于当前中奖位置的网友已经中过奖,则跳过他顺次取下一位。

3. 输出格式:

按照输入的顺序输出中奖名单,每个昵称占一行。如果没有人中奖,则输出 Keep going...

4. 输入样例:

9 3 2
Imgonnawin!
PickMe
PickMe
LookHere
Imgonnawin!
TryAgainAgain
TryAgainAgain
Imgonnawin!
TryAgainAgain
2 3 5
Imgonnawin!
PickMe

5. 输出样例:

PickMe
Imgonnawin!
TryAgainAgain
Keep going...

6. 性能要求:

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

思路:

关键在于维护两个二维字符数组,二维字符数组pRepo用于存储所有转发的用户昵称,pUser用于记录已中奖的用户。从第一位中奖序号开始以给定间隔遍历pRepo,在输出中奖信息前判断当前用户是否中过奖,是则检查下一元素,否则输出中奖信息并将当前用户加入到pUser中。

关键还是在于二维字符数组的malloc定义,第一次提交时testpoint4报Segmentation Fault就是因为malloc语句分配的大小写错了。。。只能说涉及到内存管理的语句要格外小心。另外就是如果想把这种数组指针作为参数传递的话,形参需要先定义为void *类型(参考子函数alreadyIn()),这个点需要注意下。

My Code:

#include <stdio.h>
#include <stdlib.h> // malloc header
#include <string.h> // strcmp header, strcpy header

#define MAX_LEN 21

int alreadyIn(void *des, int userCount, char *current);

// first submit testpoint4 Segmentation Fault, for malloc size have wrong...
int main(void)
{
    int repostCount = 0, interval = 0, first = 0;
    int i=0; // iterator
    int userCount = 0;
    //int j=0; // iterator
    
    scanf("%d%d%d", &repostCount, &interval, &first);
    // here must be sizeof(char[MAX_LEN])
    char (*pRepo)[MAX_LEN] = (char (*)[MAX_LEN])malloc(sizeof(char[MAX_LEN]) * repostCount);
    char (*pUser)[MAX_LEN] = (char (*)[MAX_LEN])malloc(sizeof(char[MAX_LEN]) * repostCount);
    for(i=0; i<repostCount; ++i)
    {
        scanf("%s", pRepo[i]);
    }
    
    for(i=first-1; i<repostCount; i+=interval)
    {
        while(alreadyIn(pUser, userCount, pRepo[i])) // already win a prize
        {
            ++i;
        }
        
        //char *strcpy(char *dest, const char *src)
        strcpy(pUser[userCount++], pRepo[i]);
        printf("%s\n", pRepo[i]);
    }
    
    if(!userCount)
    {
        printf("Keep going...\n");
    }
    
    free(pRepo);
    free(pUser);
    return 0;
}

int alreadyIn(void *des, int userCount, char *current)
{
    char (*pUser)[MAX_LEN] = (char(*)[MAX_LEN]) des;
    int i=0;
    
    for(i=0; i<userCount; ++i)
    {
        if(!strcmp(pUser[i], current))
        {
            return 1;
        }
    }
    
    return 0;
}

标签:1069,PAT,int,MAX,转发,LEN,char,中奖,Basic
From: https://www.cnblogs.com/tacticKing/p/17288860.html

相关文章

  • 【PAT乙】1080 MOOC期终成绩 (25分)
    problem1080MOOC期终成绩(25分)对于在中国大学MOOC(http://www.icourse163.org/)学习“数据结构”课程的学生,想要获得一张合格证书,必须首先获得不少于200分的在线编程作业分,然后总评获得不少于60分(满分100)。总评成绩的计算公式为G=(Gmid−term×40%+Gfinal×60%),如果Gmi......
  • nav_msgs/Path
    nav_msgs/Path消息用于描述一条路径信息。可以多设置几个坐标点,小车就会依次经过这些点。下面是消息格式其中包含了header和poses两个部分:header:这个消息的头部信息,包括序列号seq、时间戳stamp和参考坐标系frame_id。poses:一组路径点位姿信息,包含多个header和pose;每一个位姿......
  • 解析: xpath
    解析_1_xpath基本使用<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><title>Title</title></head><body><ul><liid="l1"class="c1&q......
  • Cannot download Packages/expat-devel-2.2.5-4.el8.x86_64.rpm: All mirrors were tr
    错误原因从错误可以看出无法下载此包,因为所有镜像都已经尝试过了。可能是因为该软件包不再可用或镜像服务器当前不可用。解决方法因为CENTOS8自带rpm,所以就不需要下载rpm了。检查依赖包是否安装:(这步可忽略)rpm-qmakeautoconfautomakecmakeperl-CPANlibcurl-develli......
  • PAT Basic 1067. 试密码
    PATBasic1067.试密码1.题目描述:当你试图登录某个系统却忘了密码时,系统一般只会允许你尝试有限多次,当超出允许次数时,账号就会被锁死。本题就请你实现这个小功能。2.输入格式:输入在第一行给出一个密码(长度不超过20的、不包含空格、Tab、回车的非空字符串)和一个正整数N(≤......
  • powershell path
    https://github.com/ThePoShWolf/Utilities/blob/master/Misc/Set-PathVariable.ps1<#.SYNOPSIS ModifythePATHenvironmentvariable..DESCRIPTION Set-PathVariableallowsyoutoaddorremovepathstoyourPATHvariableatthespecifiedscopewithlogic......
  • PAT Basic 1066. 图像过滤
    PATBasic1066.图像过滤1.题目描述:图像过滤是把图像中不重要的像素都染成背景色,使得重要部分被凸显出来。现给定一幅黑白图像,要求你将灰度值位于某指定区间内的所有像素颜色都用一种指定的颜色替换。2.输入格式:输入在第一行给出一幅图像的分辨率,即两个正整数 \(M\) 和 ......
  • PAT甲级真题1020.树的遍历
    翻译和代码思路:Acwing一个二叉树,树中每个节点的权值互不相同。现在给出它的后序遍历和中序遍历,请你输出它的层序遍历。输入格式第一行包含整数N,表示二叉树的节点数。第二行包含N个整数,表示二叉树的后序遍历。第三行包含N个整数,表示二叉树的中序遍历。输出格式输出一......
  • PAT Basic 1064. 朋友数
    PATBasic1064.朋友数1.题目描述:如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”。例如123和51就是朋友数,因为1+2+3=5+1=6,而6就是它们的朋友证号。给定一些整数,要求你统计一下它们中有多少个不同的朋友证号。2.输入......
  • PAT Basic 1063. 计算谱半径
    PATBasic1063.计算谱半径1.题目描述:在数学中,矩阵的“谱半径”是指其特征值的模集合的上确界。换言之,对于给定的\(n\)个复数空间的特征值\({a_1+b_1i,⋯,a_n+b_ni}\),它们的模为实部与虚部的平方和的开方,而“谱半径”就是最大模。现在给定一些复数空间的特征值,请你计算......