第六周第日天

103

#include <bits/stdc++.h>

using namespace std;

/* int compare_longlong(const void *a, const void *b) {

// 将void*转换为long long*,取值后做差实现升序

long long num1 = *(const long long *)a;

long long num2 = *(const long long *)b;

if (num1 < num2) return -1;

if (num1 > num2) return 1;

return 0;

} */

void BubbleSort(long long arr[],int len){

for(int i=0;i<len;i++){

for(int j=0;j<len-i-1;j++){

if(arr[j]>arr[j+1]){

long long temp=arr[j];

arr[j]=arr[j+1];

arr[j+1]=temp;

}

}

}

}

int main(){

int num;

scanf("%d",&num);

getchar();

while(num--){

char arr[2000];

gets(arr);

int len=strlen(arr);

long long arrnum[1000];

long long currNum=0;

int total=0;//记录当前数字的数量

int i=0;

int temp;

while(i<len){

temp=arr[i]-'0';

if(temp==5){

if(arr[i-1]-'0'==5){

i++;

continue;

}

}

if(temp!=5){

currNum= currNum*10+temp;

}

else{

arrnum[total++]=currNum;

currNum=0;

}

i++;

}

if(temp!=5){

arrnum[total++]=currNum;

currNum=0;

}

//qsort(arrnum, total, sizeof(long long), compare_longlong);

BubbleSort(arrnum,total);

for(int j=0;j<total;j++){

printf("%lld",arrnum[j]);

if(j!=total-1){

printf(" ");

}

}

printf("\n");

}

}

104

#include <stdio.h>

#include <string.h>

// 规范化一个数字字符串,返回处理后的字符串

void normalize(char *s) {

int len = strlen(s);

int i, j;

int has_dot = 0;

int start = 0;

int end = len - 1;

// 1. 找到小数点位置

for (i = 0; i < len; i++) {

if (s[i] == '.') {

has_dot = 1;

break;

}

}

int dot_pos = has_dot ? i : len;

// 2. 去掉整数部分的前导0

// 找到第一个非0的位置,或者小数点前的最后一个0

i = 0;

while (i < dot_pos && s[i] == '0') {

i++;

}

if (i == dot_pos) { // 整数部分全是0

start = i - 1; // 保留一个0

} else {

start = i;

}

// 3. 去掉小数部分的末尾0

if (has_dot) {

j = len - 1;

while (j > dot_pos && s[j] == '0') {

j--;

}

if (j == dot_pos) { // 小数部分全是0,去掉小数点

end = j - 1;

} else {

end = j;

}

} else {

end = dot_pos - 1;

}

// 4. 把规范化后的字符串移到开头

for (i = start, j = 0; i <= end; i++, j++) {

s[j] = s[i];

}

s[j] = '\0';

}

int main() {

int N;

scanf("%d", &N);

while (N--) {

char A[2005], B[2005];

scanf("%s %s", A, B);

normalize(A);

normalize(B);

if (strcmp(A, B) == 0) {

printf("YES\n");

} else {

printf("NO\n");

}

}

return 0;

}

105

#include <stdio.h> // 标准输入输出库(getchar/putchar/printf)

#include <string.h> // 字符串处理库(本代码未直接使用,但为通用包含)

#include <ctype.h> // 字符类型判断库(isalpha/tolower)

#define MAX_LEN 20001 // 定义最大输入长度(题目要求输入不超过20000字符,留1位存结束符)

/**

* @brief 中心扩展核心函数:以l和r为初始中心向两侧扩展,寻找最长回文子串

* @param s 原始输入字符串

* @param n 原始字符串的总长度

* @param l 扩展的左起始位置

* @param r 扩展的右起始位置(奇数回文l=r,偶数回文r=l+1)

* @param max_alpha_len 指向"当前最长字母长度"的指针(传地址实现值修改)

* @param start 指向"最长回文起始位置"的指针

* @param end 指向"最长回文结束位置"的指针

* @note 扩展时跳过非字母字符,仅比较字母(忽略大小写),长度仅统计字母

*/

void expand(char *s, int n, int l, int r, int *max_alpha_len, int *start, int *end) {

int curr_alpha_len = 0; // 记录本次扩展得到的回文串中字母的长度(仅统计字母)

int temp_start = l; // 临时存储本次扩展的回文起始位置(保留原始字符范围)

int temp_end = r; // 临时存储本次扩展的回文结束位置

// 循环扩展:左不越界(l>=0)、右不越界(r<n)时继续

while (l >= 0 && r < n) {

// 跳过左侧所有非字母字符(只处理字母,标点/空格/换行等直接跳过)

while (l >= 0 && !isalpha(s[l])) l--;

// 跳过右侧所有非字母字符

while (r < n && !isalpha(s[r])) r++;

// 边界检查:跳过非字母后可能越界,需终止扩展

if (l < 0 || r >= n) break;

// 核心判断:字母忽略大小写是否相等(回文的核心条件)

if (tolower(s[l]) == tolower(s[r])) {

// 统计字母长度:仅字母参与计数,非字母不计入

if (l == r) {

// 奇数长度回文:中心单个字母,长度+1

curr_alpha_len += 1;

} else {

// 偶数长度回文:左右各一个字母,长度+2

curr_alpha_len += 2;

}

// 更新本次扩展的回文实际起止位置(包含原始非字母字符)

temp_start = l;

temp_end = r;

// 继续向两侧扩展,寻找更长的回文

l--;

r++;

} else {

// 字母不相等,回文中断,终止扩展

break;

}

}

// 若本次扩展的字母长度超过当前最大值,则更新全局最大值和位置

if (curr_alpha_len > *max_alpha_len) {

*max_alpha_len = curr_alpha_len; // 更新最长字母长度

*start = temp_start; // 更新最长回文起始位置

*end = temp_end; // 更新最长回文结束位置

}

}

int main() {

char s[MAX_LEN]; // 存储原始输入的字符数组(包含所有字符:字母/标点/空格/换行)

int n = 0; // 记录实际输入的字符总数

int c; // 临时存储单个输入字符

// 读取全部输入:直到EOF(文件结束/控制台按Ctrl+D)或达到最大长度

// 注:getchar会读取所有字符(包括空格、换行、标点),符合题目"保留原始字符"要求

/* while ((c = getchar()) != EOF && n < MAX_LEN - 1) {

s[n++] = (char)c; // 逐个存储字符,n自增记录长度

}

s[n] = '\0'; // 字符串结束符,标记输入结束 */

gets(s);

getchar();

n=strlen(s);

s[n] = '\0';

int max_alpha_len = 0; // 存储最长回文串的字母长度(核心统计目标)

int start = 0, end = 0; // 存储最长回文串的起始/结束位置(用于输出原始字符)

// 中心扩展法核心:遍历每个字符作为可能的回文中心

for (int i = 0; i < n; i++) {

// 1. 处理奇数长度回文:中心为单个字符i(l=r=i)

expand(s, n, i, i, &max_alpha_len, &start, &end);

// 2. 处理偶数长度回文:中心为字符i和i+1之间(l=i, r=i+1)

expand(s, n, i, i + 1, &max_alpha_len, &start, &end);

}

// 输出结果:严格按题目要求

printf("%d\n", max_alpha_len); // 第一行:仅输出回文串中的字母数量

// 第二行及以后:输出包含所有原始字符的最长回文子串(标点/空格/换行都保留)

for (int i = start; i <= end; i++) {

putchar(s[i]); // 逐个输出字符,保留原始格式

}

putchar('\n'); // 最后换行,保证输出格式规范

return 0;

}

计算机科学也与几乎所有使用计算机的学科有着间接的关系。在其他领域开发的应用程序通常涉及与计算机科学家的合作,他们贡献了他们在算法、数据结构、软件工程和现有技术方面的知识。作为回报,计算机科学家有机会观察计算机的新应用,从中他们可以更深入地了解计算机的使用。这些关系使计算机科学成为一个高度跨学科的研究领域。

曾经,有可能定义三种不同类别的计算机。主机被安置在壁橱大小的大型金属框架中。微型计算机体积更小、价格更低、功能更弱,但它们可以支持多个用户并运行商业软件。微型计算机与其他类别的计算机明显不同,因为它们专用于单个用户,它们的CPU由单个微处理器芯片组成。

如今,微处理器不再是计算机类别之间的区别,因为几乎每台计算机都使用一个或多个微处理器作为其CPU。"小型计算机"一词已经不再使用,"微型计算机"和"大型机"这两个词的使用频率越来越低。

相关推荐
逆境不可逃2 小时前
LeetCode 热题 100 之 48.旋转图像
算法·leetcode·职场和发展
Frostnova丶2 小时前
LeetCode 1022. 从根到叶的二进制数之和
算法·leetcode
不会敲代码12 小时前
别再背柯里化面试题了,看完这篇你自己也会写
javascript·算法·面试
snowfoootball2 小时前
优先队列/堆 题目讲解
学习·算法
SamtecChina20232 小时前
Samtec连接器设计研究 | 载流量:温升为什么重要?
大数据·网络·人工智能·算法·计算机外设
程序员南飞2 小时前
排序算法举例
java·开发语言·数据结构·python·算法·排序算法
adore.9682 小时前
2.24 oj95 96 97
开发语言·c++·算法
白中白121382 小时前
算法题-16
算法
梦帮科技2 小时前
【DREAMVFIA开源】量子互联网协议:节点通信与路由算法
人工智能·神经网络·算法·生成对抗网络·开源·量子计算