目录
MT1311·组数
c语言实现代码
#include <stdio.h>
int main() {
int count = 0; // 用来记录个数
// 遍历所有可能的三位数
// 外层循环:遍历第一位 范围是 1 ~ 9 确保第一位不能为 0
for (int i = 1; i <= 9; i++) {
// 中层循环:遍历第二位 范围是 0~9 如果第二位与第一位相同则跳过
for (int j = 0; j <= 9; j++) {
if (j == i)
continue;
// 内层循环:遍历第三位 范围是0~9 如果与前两位相同则跳过
for (int k = 0; k <= 9; k++) {
if (k == i || k == j)
continue;
// 每找到一个符合条件的三位数就增加 count 计数
count++;
}
}
}
// 输出结果可以组成无重复的三位数
printf("%d",count);
return 0;
}
MT1312·给定的商
c语言实现代码
#include <stdio.h>
int main() {
int quotient;
scanf("%d", "ient);
// 确保商的有效性
if (quotient <= 0 || quotient >= 80) {
return 0; // 商不符合要求,直接退出
}
// 遍历所有可能的除数
for (int divisor = 1000; divisor < 10000; divisor++) {
int dividend = divisor * quotient;
// 检查被除数是否为 5 位数
if (dividend < 10000 || dividend > 99999) {
continue;
}
// 检查每个数字是否唯一,且仅使用1-9的数字
int used[10] = {0}; // 用于记录每个数字是否被使用
int temp;
// 检查被除数的每个数字
temp = dividend;
while (temp > 0) {
int digit = temp % 10;
if (digit == 0 || used[digit]) {
goto next_divisor; // 重复数字或包含0,跳过
}
used[digit] = 1; // 标记该数字已使用
temp /= 10;
}
// 检查除数的每个数字
temp = divisor;
while (temp > 0) {
int digit = temp % 10;
if (digit == 0 || used[digit]) {
goto next_divisor; // 重复数字或包含0,跳过
}
used[digit] = 1; // 标记该数字已使用
temp /= 10;
}
// 输出结果
printf("%d %d\n", dividend, divisor);
next_divisor:
continue; // 跳过当前的除数,继续下一个
}
return 0;
}
MT1313·1比2比3
c语言实现代码
#include <stdio.h>
int check_unique(int a, int b, int c) {
int digits[10] = {0}; // 用于记录数学出现情况
for (int i = 0; i < 3; i++) {
digits[a % 10]++;
digits[b % 10]++;
digits[c % 10]++;
a /= 10;
b /= 10;
c /= 10;
}
for (int i = 1; i < 10; i++) {
if (digits[i] > 1 || digits[i] == 0)
return 0; // 不能有重复数字
}
return 1; // 唯一
}
int main() {
// 外层循环 A 必须大于 100
for (int A = 100; A < 334; A++) {
int B = A * 2;
int C = A * 3;
if (B < 1000 && C < 1000) {
if (check_unique(A, B, C)) {
printf("%d:%d:%d=1:2:3\n", A, B, C);
}
}
}
return 0;
}
MT1314·精确的小数
c语言代码实现
#include <stdio.h>
int main() {
int a,b,n,A[101];
scanf("%d %d %d",&a,&b,&n);
A[0] = a / b;
a = a % b;
for(int i=1;i<=n+1;i++){
a *= 10;
A[i] = a / b;
a = a % b;
}
if(A[n+1]>=5){
A[n]++;
for(int j=n-1;j>=1;j--){
if(A[j+1] == 10){
A[j]++;
A[j+1]=0;
}
}
if(A[1]==10){
A[0]++,A[1]=0;
}
}
printf("%d",A[0]);
printf(".");
for(int z=1;z<=n;z++){
printf("%d",A[z]);
}
return 0;
}
MT1315·百战天虫
c语言实现代码
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 100
// 比较函数,用于排序
int compare(const void *a, const void *b) {
return (*(int *)a - *(int *)b);
}
int main() {
int n, m;
scanf("%d %d", &n, &m);
int worms[MAX_N], sprites[MAX_N];
// 输入天虫防御力
for (int i = 0; i < n; i++) {
scanf("%d", &worms[i]);
}
// 输入精灵伤害值
for (int i = 0; i < m; i++) {
scanf("%d", &sprites[i]);
}
// 排序天虫和精灵
qsort(worms, n, sizeof(int), compare);
qsort(sprites, m, sizeof(int), compare);
int total_cost = 0;
int sprite_used[MAX_N] = {0}; // 标记精灵是否已被使用
int j = 0; // 精灵指针
// 遍历每只天虫
for (int i = 0; i < n; i++) {
// 寻找可以击败当前天虫的精灵
while (j < m && (sprites[j] < worms[i] || sprite_used[j])) {
j++;
}
// 如果找到了合适的精灵
if (j < m) {
total_cost += sprites[j]; // 加上精灵的体力消耗
sprite_used[j] = 1; // 标记精灵为已使用
} else {
// 无法找到合适的精灵,输出null
printf("null\n");
return 0;
}
}
// 输出总的体力消耗
printf("%d\n", total_cost);
return 0;
}
MT1316·6个球
c语言实现代码
#include <stdio.h>
#define MAX_RED 3
#define MAX_WHITE 3
#define MAX_BLACK 6
#define TOTAL_BALLS 12
#define SELECTED_BALLS 6
int main() {
int count = 0;
// 遍历所有可能的红球数量
for (int red = 0; red <= MAX_RED; red++) {
// 遍历所有可能的白球数量
for (int white = 0; white <= MAX_WHITE; white++) {
// 计算黑球数量
int black = SELECTED_BALLS - red - white;
// 检查黑球数量是否合法
if (black >= 0 && black <= MAX_BLACK) {
// 至少有一个红球
if (red > 0) {
count++;
printf("%d: %d %d %d\n", count, red, white, black);
}
}
}
}
return 0;
}
MT1317·双色球
c 语言实现代码
#include <math.h>
#include <stdio.h>
int count(int n) {
if (n < 3)
return 0;
else if (n == 3)
return 1;
else if (n == 4)
return 3;
else
return 2 * count(n - 1) + pow(2, n - 4) - count(n - 4);
}
int main() {
int n;
scanf("%d", &n);
printf("%d\n", count(n));
return 0;
}
MT1318·完美平方
c 语言实现代码
#include <math.h>
#include <stdio.h>
int isPerfectSqure(int num) {
int sqrtNum = (int)sqrt(num);
return sqrtNum * sqrtNum == num;
}
int isPerfectSqureSum(int n) {
int sqrtN = (int)sqrt(n);
// 检查是否为平方数
if (sqrtN * sqrtN != n) {
return 0; // 不是平方数
}
// 检查分割后是否都为平方数
for (int i = 0; i <= sqrtN; i++) {
int a = i * i; // 第一个平方数
int b = n - a; // 第二部分
// 检查 b是否为平方数
if (b >= 0 && isPerfectSqure(b)) {
return 1; // 存在符合分割
}
}
return 0; // 没有符合条件的分割
}
int main() {
int n;
scanf("%d", &n);
if (isPerfectSqureSum(n)) {
printf("YES");
} else {
printf("NO");
}
return 0;
}
MT1319·分数拆分
c语言实现代码
#include <stdio.h>
int main() {
int A;
scanf("%d", &A);
for (int B = 1000; B > 1; B--) {
for (int C = 1000; C > 1; C--) {
if (B >= C && A * (B + C) == B * C) {
printf("%d %d %d\n", A, B, C);
}
}
}
return 0;
}
MT1320·和为偶数
c 语言实现代码
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
int num[100];
int i;
int sum = 0;
for (int i = 0; i < n; i++) {
scanf("%d", &num[i]);
sum += num[i];
}
for (int i = 0; i < n; i++) {
if ((sum + num[i]) % 2 == 0) {
printf("%d", num[i]);
break;
}
}
return 0;
}