当前位置: 首页 > news >正文

算法笔记 02 —— 入门模拟

本系列为胡凡编著的算法笔记当中代码部分的精简版整理,笔者也在同时准备Leetcode刷题和实习面试,希望为有一定编码和数据结构基础的同学提供一份系统型的参考,以方便遗忘时的算法查阅、期末复习总览以及C++学习参照。

目录

01 简单模拟

Ⅰ害死人不偿命的(3*n+1)思想

Ⅱ 挖掘机技术哪家强

02 查找元素 —— 找 x

03 图形输出 —— 跟奥巴马一起编程

04 日期处理 —— 日期差值

05 进制转换

Ⅰ D 进制的 A+B

06 字符串处理

Ⅰ 回文串

Ⅱ 说反话


01 简单模拟

Ⅰ害死人不偿命的(3*n+1)思想

#include <iostream>
using namespace std;int CalCallatz(int n){int k = 0;while(n != 1){if(n % 2 == 0){n /= 2;}else{n = (n * 3 + 1) / 2;}k++;}return k;
}int main(){int n;scanf("%d", &n);int count;count = CalCallatz(n);printf("%d", count);return 0;
}
Ⅱ 挖掘机技术哪家强

#include <iostream>
using namespace std;int main(){int N;scanf("%d", &N);//输入名单int school[100000] = {0};int k, score, flag1 = 0;for(int i = 0; i < N; i++){scanf("%d%d", &k, &score);school[k] += score;if(k > flag1) flag1 = k; //flag1记录学校个数}//查找最大int maxScore = 0, flag2 = 0;for(int i=0; i<=flag1; i++){if(school[i] > maxScore){maxScore = school[i];flag2 = i; //flag2记录最大学校编号}}printf("%d %d", flag2, maxScore);return 0;
}

02 查找元素 —— 找 x

#include <iostream>
using namespace std;
const int MAXN = 210;int main(){int n, x, num[MAXN] = {0};while(scanf("%d", &n) != EOF){ //1 输入多组数据for(int i=0; i<n; i++){scanf("%d", &num[i])}scanf("%d", &x);for(int i=0; i<n; i++){if(num[i] == x){printf("%d\n", i);break; //2 节省查找时间}}if(i == n){printf("-1\n") //3 没找到也要答复一下}}return 0;
}

03 图形输出 —— 跟奥巴马一起编程

#include <iostream>
using namespace std;int main(){int N;char c;scanf("%d %c", &N,,&c); //1 注意%d和%c之间的空格for(int i=0; i<N; i++){printf("%c", c);}printf("\n");for(int i=0; i<(int)((N + 1) / 2 - 2); i++){printf("%c", c);for(int j=0; j<(N-2); j++){printf(" ");}printf("%c\n", c);}for(int i=0; i<N; i++){printf("%c", c);}return 0;
}

04 日期处理 —— 日期差值

#include <iostream>
using namespace std;//1 分解年月日
//2 年分365、366天,月分29、30、31天
//3 数据比大小,小的做加法int specialYear(int x){if(x % 4 == 0 && x % 100 != 0)return 1;else return 0;
}int main(){int data1, data2;int y1, y2, m1, m2, d1, d2;//4 二维数组,巧妙地把月份和年份联结起来int month[13][2] = {{-1,-1}, {31, 31}, {28, 29}, {31, 31}, {30, 30}, {31, 31}, {30, 30}, {31, 31}, {31, 31},{30, 30},{31, 31}, {30, 30}, {31, 31}};while(scanf("%d%d", &data1, &data2) != EOF){if((data1 - data2) < 0){int temp = data1;data1 = data2;data2 = temp;}d1 = data1 % 100, m1 = (data1 / 100) %100, y1 = data1 / 10000;d2 = data2 % 100, m2 = (data2 / 100) %100, y2 = data2 / 10000;int count = 0;while(!(y1 == y2 && m1 == m2 && d1 == d2)){d2++;count++;if(d2 == month[m2][specialYear(y2)] + 1){m2++;d2 = 1;if(m2 == 13){m2 = 1;y2++;}} }printf("%d\n", count);}return 0;
}

05 进制转换

对一个 P 进制的数,如果要转换为 Q 进制,需要分为两步:

① 将 P 进制数 x 转换为十进制数 y。

int x, P;
scanf("%d%d", &x, &P);int y = 0, product = 1;
while(x != 0){y = y + (x % 10) * product;x = x / 10;product = product * P;
}

② 将十进制数 y 转换为 Q 进制数 z。

采用 “除基取余法”。每次将待转换数 y 除以 Q,得到的余数作为低位存储,得到的商继续除以 Q 并重复上述操作,最后商为 0 时,将所有位从高到底输出得到 z。

int Q;
scanf("%d", &Q);int z[40], i = 0;
//如果十进制数y恰好等于0,那么使用while语句会使循环直接跳出,而非存放z[0]=0
do{z[i] = y % Q;y = y / Q;i++;
}while(y != 0);while(i != -1){printf("%d", z[i]);i--;
}
Ⅰ D 进制的 A+B

#include <iostream>
using namespace std;int main(){int A, B, D;scanf("%d%d%d", &A, &B, &D);int C = A + B;//除基取余法int num[40], i = 0;do{num[i++] = C % D;C /= D;}while(C != 0);while(i != -1){printf("%d", num[--i])}return 0;
}

06 字符串处理

Ⅰ 回文串

#include <iostream>
using namespace std;int main(){char str[255];gets(str);int len = strlen(str); //1 字符串长度strlen()for(int i = 0; i < (len / 2); i++){if(str[i] != str[len - 1 - i]){ printf("NO.");}}if(i == len / 2){printf("Yes.")}return 0;
}
Ⅱ 说反话

#include <iostream>
using namespace std;int main(){char str[80], word[80][80] = {(0, 0)};while(gets(str) != EOF){int m = 0, n = 0;for(int i=0; i<strlen(str); i++){if(str[i] != ' '){word[m][n++] = str[i];}else{word[m][n] = '\0'; //1 末尾是结束符\0m++;n = 0;}}while(m != 0){puts(word[m--]);printf(" ");}//2 最后一个单词之后输出空格会导致 “格式错误”puts(word[0]);}return 0;
}

http://www.lryc.cn/news/536051.html

相关文章:

  • PyTorch 源码学习:从 Tensor 到 Storage
  • uniapp 使用 鸿蒙开源字体
  • LabVIEW多电机CANopen同步
  • 每日定投40刀BTC(2)20250209 - 20250212
  • 【LeetCode Hot100 子串】和为 k 的子数组、滑动窗口最大值、最小覆盖子串
  • 某虚拟页式存储管理系统中有一个程序占8个页面,运行时访问页面的顺序是1,2,3,4,5,3,4,1,6,7,8,7,8,5。假设刚开始内存没有预装入任何页面。
  • 傅里叶公式推导(三)
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_time_update函数
  • 老牌系统工具箱,现在还能打!
  • mysql error1449解决方法
  • Notepad++ 中删除所有以 “pdf“ 结尾的行
  • 归并排序 和 七大算法的总结图
  • 嵌入式硬件篇---原码、补码、反码
  • 评估多智能体协作网络(MACNET)的性能:COT和AUTOGPT基线方法
  • 洛谷题目: P2398 GCD SUM 题解 (本题较难,省选-难度)
  • kubernetes-cni 框架源码分析
  • AI Agent有哪些痛点问题
  • 使用Java爬虫获取京东JD.item_sku API接口数据
  • 华为云+硅基流动使用Chatbox接入DeepSeek-R1满血版671B
  • 平方数列与立方数列求和的数学推导
  • Java中的synchronized关键字与锁升级机制
  • 告别传统校准!GNSS模拟器在计量行业的应用
  • 数据结构结尾
  • 【golang】量化开发学习(一)
  • AI前端开发:跨领域合作的新引擎
  • 数组练习(深入理解、实践数组)
  • Bigemap Pro如何进行面裁剪
  • acwing算法全总结-数学知识
  • SpringMVC学习使用
  • 10、《文件上传与下载:MultipartFile与断点续传设计》