PAT a1116

目的:按照排名给奖品。

输入:

N  人数

输出:

和人的排位有关,输入他的奖品

第一名,是否质数,其他三类奖品。

算法:

用unordered_map,存名字和排名,然后计算是否为质数

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

using namespace std;
const int inf = 1000000000;
const int maxn = 10010;

int hash1[maxn] = {0};

bool isprime(int x)
{
    int sqr = (int)sqrt(1.0*x);
    for(int i=2;i<=sqr;i++)
    {
        if(x%i==0)
        {
            return false;
        }
    }
    return true;
}
int main()
{
    int N;
    scanf("%d",&N);

    int id;

    for(int i=0;i<N;i++)
    {
        scanf("%d",&id);
        hash1[id] = i+1;
    }
    int M,q;
    scanf("%d",&M);
    for(int i=0;i<M;i++)
    {
        scanf("%d",&q);
        if(hash1[q]==0)
        {
            printf("%04d: Are you kidding?\n",q);
        }else if(hash1[q]==inf)
        {
            printf("%04d: Checked\n",q);
        }else
        {
            if(hash1[q]==1)
            {
                printf("%04d: Mystery Award\n",q);
            }else if(isprime(hash1[q]))
            {
                printf("%04d: Minion\n",q);
            }else
            {
                printf("%04d: Chocolate\n",q);
            }
            hash1[q] = inf;
        }
    }
    return 0;
}

反思:数和数的编号别弄混了。有时候用的这个数下标所指单元的值。

### PAT乙级1116题目的Java实现 #### 题目背景 PAT(Programming Ability Test)是一个用于评估编程能力的考试平台,其中乙级难度主要面向初学者。对于特定题目如1116,其核心在于理解输入输出的要求以及算法设计。 #### 解决方案概述 根据已知的信息[^1],在处理PAT乙级测试时,Java由于I/O操作较慢可能面临性能瓶颈。因此,在解决具体问题前需优化读取和写入逻辑。以下是基于引用中的方法构建的一个通用框架,并结合实际需求完成1116题的具体实现。 #### Java代码实现 以下为PAT乙级1116题的一种标准解决方案: ```java import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 输入字符串并去除首尾空白字符 String input = scanner.nextLine().trim(); // 初始化变量存储统计结果 int letterCount = 0; int spaceCount = 0; int digitCount = 0; int otherCount = 0; // 遍历字符串逐个字符判断类别 for (int i = 0; i < input.length(); i++) { char ch = input.charAt(i); if (Character.isLetter(ch)) { // 判断字母 letterCount++; } else if (ch == ' ') { // 判断空格 spaceCount++; } else if (Character.isDigit(ch)) { // 判断数字 digitCount++; } else { // 其他字符 otherCount++; } } // 输出最终的结果 System.out.println(letterCount); System.out.println(spaceCount); System.out.println(digitCount); System.out.println(otherCount); scanner.close(); } } ``` 上述代码实现了对给定字符串中不同类型的字符计数功能,分别计算英文字母、空格、数字以及其他字符的数量[^2]。 #### 关键点说明 - **Scanner类**:虽然`BufferedReader`效率更高,但对于简单场景下使用`Scanner`可以简化开发流程。 - **分类条件**:利用`Character`内置函数区分各类字符,确保准确性[^3]。 - **资源管理**:调用`scanner.close()`释放资源,防止潜在内存泄漏问题[^4]。 #### 性能考量 尽管此版本能够满足大部分情况下的时间约束,但在极端大数据量情况下仍建议采用更高效的流式处理方式替代传统的逐字符扫描机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值