MT1351·用函数判断素数
c 语言代码实现
#include <stdio.h>
int isPrime(int num) {
if (num <= 1)
return 0;
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) {
return 0;
}
}
return 1;
}
int main() {
int num;
scanf("%d", &num);
if (isPrime(num)) {
printf("Y");
} else {
printf("N");
}
return 0;
}
MT1352·埃拉托色尼筛选法
c 语言代码的实现
#include <stdio.h>
int isPrime(int num) {
if (num <= 1)
return 0;
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) {
return 0;
}
}
return 1;
}
int main() {
int right;
scanf("%d", &right);
for (int i = 2; i <= right; i++) {
if (isPrime(i) == 1) {
printf("%d ", i);
}
}
return 0;
}
MT1353·找零
c 语言实现代码
#include <stdio.h>
// 定义人民币面值
int denominations[] = {50, 20, 10, 5, 2, 1};
// change函数:计算最少的张数来找零
void change(int m, int c) {
int change_amount = c - m; // 计算找零的金额
int total_notes = 0; // 记录使用的人民币张数
for (int i = 0; i < 6; i++) {
// 计算当前面值需要多少张
int num_notes = change_amount / denominations[i];
total_notes += num_notes; // 加入总的张数
change_amount -= num_notes * denominations[i]; // 更新剩余需要找零的金额
}
printf("%d\n", total_notes); // 输出找零的总张数
}
int main() {
int m, c;
// 输入商品价格和顾客付款
scanf("%d %d", &m, &c);
// 调用change函数,输出最少的张数
change(m, c);
return 0;
}
MT1354·购物
c 语言代码实现
#include <stdio.h>
void change(double m, double c) {
int denominations[] = {5000, 2000, 1000, 500, 200, 100,
50, 20, 10, 5, 2, 1};
int num_denominations = sizeof(denominations) / sizeof(denominations[0]);
int change_amount = (int)((c - m) * 100 + 0.5);
int total_notes = 0;
for (int i = 0; i < num_denominations; i++) {
if (change_amount <= 0) {
break;
}
total_notes += change_amount / denominations[i];
change_amount %= denominations[i];
}
printf("%d\n", total_notes);
}
int main() {
double m, c;
scanf("%lf %lf", &m, &c);
change(m, c);
return 0;
}
MT1355·稀疏二进制
c 语言代码实现
#include <stdio.h>
// 判断一个数的二进制是否为稀疏二进制
int isSparse(int n) {
// 检查 n 的二进制表示中是否有连续的 1
return (n & (n >> 1)) == 0;
}
// 查找下一个稀疏二进制
int nextSparse(int n) {
while (!isSparse(n)) {
n++;
}
return n;
}
int main() {
int n;
scanf("%d", &n);
if (isSparse(n)) {
printf("%d", n);
} else {
int sparseNumber = nextSparse(n + 1);
printf("%d", sparseNumber);
}
return 0;
}
MT1356·二进制回文
c 语言代码实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 函数:将整数转换为二进制字符串
char* intToBinaryString(int n) {
// 计算二进制字符串的长度
int length = sizeof(n) * 8; // 32位整数
char* binaryString = (char*)malloc(length + 1); // +1 为了存储结束符
if (binaryString == NULL) {
return NULL; // 内存分配失败
}
// 将整数转换为二进制字符串
for (int i = 0; i < length; i++) {
binaryString[length - 1 - i] = (n & (1 << i)) ? '1' : '0';
}
binaryString[length] = '\0'; // 添加字符串结束符
// 去掉前导零
char* start = binaryString;
while (*start == '0' && *(start + 1) != '\0') {
start++;
}
// 返回去掉前导零后的字符串
char* result = strdup(start);
free(binaryString); // 释放原始字符串内存
return result;
}
// 函数:判断字符串是否为回文
int isPalindrome(const char* str) {
int len = strlen(str);
for (int i = 0; i < len / 2; i++) {
if (str[i] != str[len - 1 - i]) {
return 0; // 不是回文
}
}
return 1; // 是回文
}
int main() {
int N;
scanf("%d", &N);
// 将整数转换为二进制字符串
char* binaryString = intToBinaryString(N);
if (binaryString == NULL) {
printf("内存分配失败\n");
return 1;
}
// 判断二进制字符串是否为回文
if (isPalindrome(binaryString)) {
printf("YES\n");
} else {
printf("NO\n");
}
// 释放内存
free(binaryString);
return 0;
}
MT1357·高低交换
c 语言代码实现
#include <stdio.h>
// 函数:交换n的高四位和低四位
unsigned char change(unsigned char n) {
// 取高4位并移动到低4位
unsigned char high = (n >> 4);
// 取低4位并移动到高4位
unsigned char low = n << 4;
// 返回低四位和高四位交换后的结果
return low | high;
}
int main() {
unsigned char n;
// 输入一个unsigned char类型的数据
scanf("%hhu", &n);
// 调用函数交换高四位和低四位
unsigned char result = change(n);
// 输出交换后的结果
printf("%hhu\n", result);
return 0;
}
MT1358·第k位
c 语言代码实现
#include <stdio.h>
// 函数:获取 n 的二进制表示中从右边开始的第 k 位
int getbit(int n, int k) {
// 右移 k-1 位,将第 k 位移到最右侧,然后与 1 进行按位与操作
return (n >> (k - 1)) & 1;
}
int main() {
int n, k;
// 输入整数 n 和 k
scanf("%d %d", &n, &k);
// 调用函数获取 n 的第 k 位
int bit = getbit(n, k);
// 输出结果
printf("%d\n", bit);
return 0;
}
MT1359·循环移位
c 语言代码实现
#include <stdio.h>
// 定义移位函数
unsigned move(unsigned value, int n) {
// 确保 value 是 4 位二进制数,即只保留低 4 位
value = value & 0xF; // 0xF 表示二进制的 1111,只保留低 4 位
// 获取 4 位二进制的总位数
int bits = 4;
// 处理左移 (n < 0)
if (n < 0) {
n = -n; // 将负数转换为正数
n = n % bits; // 处理 n 大于 4 的情况,取模 4
return ((value << n) | (value >> (bits - n))) & 0xF; // 循环左移
}
// 处理右移 (n > 0)
else if (n > 0) {
n = n % bits; // 处理 n 大于 4 的情况,取模 4
return ((value >> n) | (value << (bits - n))) & 0xF; // 循环右移
}
// 如果 n == 0,不做移位
return value;
}
int main() {
unsigned value;
int n;
// 输入要操作的 value 和移位的位数 n
scanf("%u %d", &value, &n);
// 调用 move 函数执行移位操作
unsigned result = move(value, n);
// 输出移位结果
printf("%u\n", result);
return 0;
}
MT1360·左右函数
c 语言代码实现
#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 100 // 定义最大字符串长度
// 函数:复制字符串的最左边3个字符
void left(const char* str) {
char leftPart[4]; // 3个字符 + 1个结束符
strncpy(leftPart, str, 3); // 复制最左边3个字符
leftPart[3] = '\0'; // 添加字符串结束符
printf("%s\n", leftPart);
}
// 函数:复制字符串的最右边3个字符
void right(const char* str) {
char rightPart[4]; // 3个字符 + 1个结束符
int len = strlen(str);
// 复制最右边3个字符
if (len >= 3) {
strncpy(rightPart, str + len - 3, 3); // 从倒数第3个字符开始复制
} else {
strncpy(rightPart, str, len); // 如果字符串长度小于3,复制整个字符串
}
rightPart[3] = '\0'; // 添加字符串结束符
printf("%s\n", rightPart);
}
int main() {
char str[MAX_LENGTH];
fgets(str, MAX_LENGTH, stdin); // 使用 fgets 读取字符串
str[strcspn(str, "\n")] = '\0'; // 去掉换行符
// 调用函数
left(str);
right(str);
return 0;
}
标签:int,MT1351,char,二进制,MT1360,str,码题,include,change
From: https://blog.csdn.net/xinfanyyds/article/details/142905169