A. SYUCTACM
签到题,
for
循环从2008到2024遍历,输出
ACcode
#include<stdio.h>
int main(){
for(int i = 2008; i <= 2024; i ++) printf("SYUCTACM%d\n", i);
return 0;
}
B. 超级质数
用
while
循环将n
的每一位取出来累加到sum
,判断两遍质数,不会请移步至讲义
ACcode
#include<stdio.h>
int is_prime(int x){
//判断质数
if(x == 1 || x == 0) return 0;
for(int i = 2; i * i <= x; i ++){
if(x % i == 0) return 0;
}
return 1;
}
int main(){
int n;
scanf("%d", &n);
int sum = 0;
int t = n;
while(t){
//while循环取位
sum += t % 10;
t /= 10;
}
if(is_prime(n) == 1 && is_prime(sum) == 1) puts("YES"); //是超级质数
else puts("No"); //不是
return 0;
}
C. 交并补
纯模拟,用两个数组记录一下
1~1000
中的每个数是否出现过,用for
循环遍历1~1000
的每个数,按交集并集补集的定义来判断,如果满足就输出
ACcode
#include<stdio.h>
int cnt_A[1010], cnt_B[1010]; // 记录1~1000的每个数在A、B集合中是否出现过,0表示没出现,1表示出现
int main(){
int n, m;
scanf("%d%d", &n, &m);
for(int i = 0; i < n ; i ++){
int x;
scanf("%d", &x); //输入A集合的n个数
cnt_A[x] ++; //A集合中出现过
}
for(int i = 0; i < m; i ++){
int x;
scanf("%d", &x); //输入B集合的m个数
cnt_B[x] ++; //在B集合出现过
}
for(int i = 1; i <= 1000; i ++){
if(cnt_A[i] == 1 && cnt_B[i] == 1) printf("%d ", i); //交集:在A、B集合同时出现
}
printf("\n");
for(int i = 1; i <= 1000; i ++){
if(cnt_A[i] == 1 || cnt_B[i] == 1) printf("%d ", i); //并集:在A集合中出现或在B集合中出现
}
printf("\n");
for(int i = 1; i <= 1000; i ++){
if(cnt_A[i] == 0 && cnt_B[i] == 1){
//如果集合B中有全集A中没有的元素,补集就不存在
printf("-1");
return 0; //输出-1,并结束程序
}
}
for(int i = 1; i <= 1000; i ++){
if(cnt_A[i] == 1 && cnt_B[i] == 0) printf("%d "