1059 C语言竞赛 (20 分)

xiaoxiao2021-02-28  55

解题思路 显然这是一道排序题,但是有几个比较烦的地方,其一需要判断素数,由于这里给的数字不是很大,可以用单个判别,不用打素数表,当然打表以后速度更快;其二,对于查过的编号需要输出checked,但是不存在的ID仍然需要输出Are you kidding?所以再散列一遍参赛选手的ID。 注意 参赛选手编号是四位数,所以需要用0填充,这一点在样例中有体现,相信大家都不会出问题。

#include<cstdio> #include<cmath> int isprime(int x){ if(x<=1) return 0; int sqr=int(sqrt(x) + 0.5); for(int i=2;i<=sqr;i++){ if(x%i==0) return 0; } return 1; } const int maxn=10005; int arr[maxn]={0},checked[maxn]={0}; int main(){ int n,num,k; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&num); arr[num]=i+1; } scanf("%d",&k); for(int i=0;i<k;i++){ scanf("%d",&num); if(checked[num]==1) { printf("d: Checked\n",num); } else if(arr[num]==0) { printf("d: Are you kidding?\n",num); } else if(arr[num]==1) { printf("d: Mystery Award\n",num); checked[num]=1; } else if(isprime(arr[num])) { printf("d: Minion\n",num); checked[num]=1; } else { printf("d: Chocolate\n",num); checked[num]=1; } } return 0; }

Java

有两个测试点一直超时,看来PAT对java不是很友好。

import java.io.*; import java.util.*; public class hello { public static boolean isprime(int x) { if(x <= 1) return false; int sq = (int) Math.sqrt(x); for(int i = 2; i <= sq; i++) { if(x % i == 0) return false; } return true; } public static void main(String[] args) throws IOException { Scanner in = new Scanner(System.in); int n = in.nextInt(); int arr[] = new int[10007]; int id; for(int i = 1; i <= n; i++) { id = in.nextInt(); arr[id] = i; } int m = in.nextInt(); for(int i = 1; i <= m; i++) { id = in.nextInt(); System.out.printf("d: ", id); if(arr[id] == 1) { System.out.println("Mystery Award"); arr[id] = -1; }else if(isprime(arr[id])) { System.out.println("Minion"); arr[id] = -1; }else if(arr[id] == -1) { System.out.println("Checked"); }else if(arr[id] == 0) { System.out.println("Are you kidding?"); }else { System.out.println("Chocolate"); arr[id] = -1; } } in.close(); } }
转载请注明原文地址: https://www.6miu.com/read-2624450.html

最新回复(0)