2021年西交大计基题目解析(第13周)

本文涵盖了多个编程与算法问题,包括:十进制到K进制的转换、数字乘法及组合最大数、签到记录的处理、约瑟夫斯问题、字符串处理、新兵训练队列模拟、数组元素筛选及排序、有理数求和、数字提取与求和、以及字符出现统计。这些问题涉及到了基础算法、逻辑思维以及字符串处理技巧,对于提升编程能力十分有益。

1.K进制数的转换。输入非负整数a将其转换为K进制数,2 <= K <= 32。进制数使用的符号是0~9, A, …V来表示(字母是大写) 输入:一个十进制非负整数a和一个正整数K, 2<=K<=32。空格分隔。 输出:K进制表示的整数。

#include<stdio.h>
int main() {
   
   
	int a, k, b;
	char arr[100] = {
   
    0 };
	int i = 0;
	scanf("%d %d", &a, &k);
	if (a == 0)
		printf("0");
	else {
   
   
		while (a / k != 0 || a % k <= k && a % k > 0) {
   
   
			b = a % k;
			if (b < 10) {
   
   
				arr[i] = b + '0';
				i++;
			}
			else {
   
   
				arr[i] = b - 10 + 'A';
				i++;
			}
			a /= k;
		}
		for (int j = i - 1; j >= 0; j--) {
   
   
			printf("%c", arr[j]);
		}
	}
	return 0;
}

2.任意输入一个自然数,将该数乘以3,输出乘积和乘积中各位数字组成的最大数。 例如,输入 5370 ,乘3结果为16110,则输出为 16110 61110。 输入格式: 自然数 n 输出格式: 乘3结果和乘积中各位数字组成的最大数,空格隔开。

#include<stdio.h>
#include<math.h>
#include<string.h>
int main() {
   
   
	int a, A, len = 1;
	int arr[100] = {
   
    0 };
	scanf("%d", &a);
	A = 3 * a;
	printf("%d ", A);
	//数字位数的计算
	int B = A;
	while (B / 10 != 0) {
   
   
		len++;
		B /= 10;
	}
	//得到每一位的数字
	int temp;
	for (int i = 0; i < len; i++) {
   
   
		temp = A / pow(10, len - 1 - i);
		arr[i] = temp % 10;
	}
	//排序
	for (int i = 0; i < len - 1; i++) {
   
   
		for (int j = 0; j < len - 1 - i; j++) {
   
   
			if (arr[j] > arr[j + 1]) {
   
   
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
	for (int i = len-1; i>=0; i--) {
   
   
		printf("%d", arr[i]);
	}
	return 0;
}

3.每天一开始,第一个在机房里签字的人会打开门,最后一个签字的人会锁上门。根据签到的记录,你应该找到那天开门和锁门的人。记录保证每个人的签到时间必须早于签退时间,并且没有两个人同时签到或签退。
输入:一天的记录,记录以正整数M开头,M是记录总数,后跟M行,每行的格式为: ID_number Sign_in_time
Sign_out_time,其中时间以HH:MM:SS格式给定,ID number是一个不超过15个字符的字符串。
输出:在一行中输出当天开锁和锁门的人员的ID号。这两个ID号必须用一个空格隔开。

#include<stdio.h>
#include<string.h>
struct daka {
   
   
	char ID[20];
	char Ftime[10];
	char Ltime[10];
};
int main() {
   
   
	struct daka daka[100];
	int num;
	scanf
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值