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;
}