PAT乙级 ------ 1096 ~ 1102大美数、矩阵行平移、岩洞施工、性感素数、B是A的多少倍、 教超冠军卷

1096 大美数

#include<stdio.h>
#include<math.h>
#define LEN 50

int main() {
	int n, num, flag, cnt, factor[LEN];
	scanf("%d", &n);
	while(n-- > 0) {
		flag = 0;
		cnt = 0;
		scanf("%d", &num);
		for(int i=1; i<=sqrt(num); i++) {
			if(num%i==0) {
				if(num/i != i) {
					factor[cnt++] = i;
					factor[cnt++] = num/i;
				} else
					factor[cnt++] = i;
			}
		}
		if(cnt<4)
			goto a;
		for(int i=0; i<cnt; i++) {
			for(int j=i+1; j<cnt; j++) {
				for(int k=j+1; k<cnt; k++) {
					for(int l=k+1; l<cnt; l++) {
						if((factor[i]+factor[j]+factor[k]+factor[l]) % num == 0) {
							flag = 1;
							goto a;
						}
					}
				}
			}
		}
a:
		if(flag==1)
			puts("Yes");
		else
			puts("No");
	}
}

在这里插入图片描述
1097 矩阵行平移

#include<stdio.h>
#define LEN 100

int main() {
	int n, k, x, _k=1, sum[LEN]= {0}; //位置0上的元素记录某奇数行的元素已经“移动”了几次。
	scanf("%d%d%d", &n, &k, &x);
	for(int i=1; i<=n; i++) {
		int temp, ch;
		for(int j=1; j<=n;) {
			if(i%2 == 0) { //偶数行
				scanf("%d", &temp);
				sum[j++] += temp;
			} else { //奇数行
				if(sum[0]++ < _k)//本行要移动_k个位置
					sum[j++] += x;
				else {
					scanf("%d", &temp);
					sum[j++] += temp;
				}
			}
		}
		if(i%2 != 0) {
			sum[0] = 0;
			_k = _k==k ? 1 : _k+1;//更新下一奇数行元素应该移动的次数
			while((ch=getchar()) != '\n');//吸收末尾数字
		}
	}
	for(int i=1; i<=n; i++) {
		printf("%d", sum[i]);
		if(i != n)
			putchar(' ');
	}
	return 0;
}

在这里插入图片描述
1098 岩洞施工

#include<stdio.h>

int main() {
	int cnt, upMin, downMax, n, x;
	cnt = 2;
	upMin = 1000;
	downMax = 0;
	scanf("%d", &n);
	while(cnt-- > 0) {
		for(int i=0; i<n; i++) {
			scanf("%d", &x);
			if(cnt == 1)
				upMin = x < upMin ? x:upMin;
			else
				downMax = x > downMax ? x: downMax;
		}
	}
	if(upMin > downMax)
		printf("Yes %d",upMin-downMax);
	else
		printf("No %d",downMax-upMin+1);
	return 0;
}

在这里插入图片描述
1099 性感素数

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

int IsPrime(int n) {
	if(n<=1)
		return 0;
	for(int i=2; i<=sqrt(n); i++) {
		if(n%i == 0)
			return 0;
	}
	return 1;
}

int main() {
	int n;
	scanf("%d", &n);
	if(IsPrime(n) && (IsPrime(n-6) ||IsPrime(n+6)) ) {
		if(IsPrime(n-6)) {
			printf("Yes\n%d",n-6);
		} else if(IsPrime(n+6))
			printf("Yes\n%d",n+6);
	} else {
		int i=n+1;
		while(1) {
			if(IsPrime(i) && (IsPrime(i-6) ||IsPrime(i+6)) ) {
				printf("No\n%d",i);
				break;
			}
			i++;
		}
	}
	return 0;
}




在这里插入图片描述
1101 B是A的多少倍

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

int GetMask(int num) {
	int d = 1;
	while(num >	9) {
		d *= 10;
		num /= 10;
	}
	return d;
}

int main() {
	int num1, num2, temp, mask, d;
	scanf("%d%d", &num1, &d);
	temp = num1;
	mask = GetMask(num1)/(int)pow(10, d);
	num2 = num1 % (int)pow(10, d);
	num1 /= (int)pow(10, d);
	while(mask > 0) {
		num2 = num2*10 + num1/mask;
		num1 %= mask;
		mask /= 10;
	}
	printf("%.2f", 1.0*num2/temp);
	return 0;
}

在这里插入图片描述
1102 教超冠军卷

#include<stdio.h>
#include<string.h>
#define LEN 10

int main() {
	int n, sMax=-1, vMax=-1;
	char sChampion[LEN], vChampion[LEN];
	scanf("%d", &n);
	while(n-- > 0) {
		char id[LEN];
		int price, amount;
		scanf("%s %d %d", &id, &price, &amount);
		if(price*amount > sMax) { //销售额冠军
			strcpy(sChampion, id);
			sMax = price * amount;
		}
		if(amount > vMax) { //销量冠军
			strcpy(vChampion, id);
			vMax = amount;
		}
	}
	printf("%s %d\n%s %d", vChampion, vMax, sChampion, sMax);
	return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值