算法
凯尔kyle
这个作者很懒,什么都没留下…
展开
-
素数判断 - C语言实现
除了1和自身之外不能整除其它数, 称之为素数. 最小的素数是2. 没有最大的素数.1000以内素数, 如下图所示:关于素数的算法, 一般有2种.第1种, 给出一个数n(n >= 2), 判断n是不是素数第2种, 给出一个数n(n >= 2), 把[2, n]的所有素数拿出来判断一个数n是否是素数, 最简单粗暴的方法就是把n分别与i(i的范围是[2, n-1])求余...原创 2017-10-10 19:03:00 · 110 阅读 · 0 评论 -
简单插入排序
输入: 待排序的整型数组, 输出: 排序完毕的整型数组.排序方法: 按照从小到大排序.数组下标0, 不存放元素, 用作哨兵或其它用途.实现思路:把整个数组元素分成2部分, 已排序好的元素和未排序好的元素, 每次把未排序中的元素, 拿出一个放在已排序好的元素中恰当的位置, 循环到最后, 即完成排序.初始状态, 数组下标1, 也就是第1个元素, 就是已排好序的元素, [2, ma...原创 2017-10-04 18:32:00 · 53 阅读 · 0 评论 -
简单选择排序
输入: 待排序的整型数组, 输出: 排序完毕的整型数组.排序方法: 按照从小到大排序.数组下标0, 不存放元素, 用作哨兵或其它用途.实现思路:每次循环一次, 把最小的值放在首位.例如让第1个值, 分别与后面所有的值比较, 如果发现后面有值比第1个值小,则记录下这个位置, 当一次循环完毕后记录的位置就是最小值, 交换记录位置的值和当前值.完整实现代码如下:#includ...原创 2017-10-04 16:46:00 · 50 阅读 · 0 评论 -
C语言-随机数
C语言使用rand()函数产生随机数, 使用rand()函数之前要先使用srand(time(0)),以当前时间作为种子, 否则产生的随机数将不会变化.#include <stdio.h>#include <stdlib.h>#include <time.h>int main () { srand(time(0)); //use c...原创 2017-10-03 09:24:00 · 67 阅读 · 0 评论 -
二分查找(折半查找)
数据元素采用数组方式存储, 并且按照从小到大的顺序存储.下标0不存放元素, 从下标1开始存放元素, 元素值的范围在[1, 150].#include <stdio.h>void print (int arr[], int length);int binarySearch (int arr[], int val, int max);int main () { ...原创 2017-10-02 21:11:00 · 53 阅读 · 0 评论 -
顺序查找-顺序查找-带哨兵查找
下面的顺序查找算法采用了倒序查找的方式, 以保持程序的一致性. 就是把数组下标为0的,元素空下来, 不存放具体的元素, 而是存放要查找的元素. 这样在查找的过程中, 采用倒序遍历的方式, 即从数组最后一个元素开始一直遍历到第0个数组元素.#include <stdio.h>#include <stdlib.h>void print (int arr[]...原创 2017-10-02 17:11:00 · 411 阅读 · 0 评论 -
1002. 写出这个数 (20)
原题: https://www.patest.cn/contests/pat-b-practise/1002参考: http://www.cnblogs.com/geyang/p/6243512.html实现思路:按照题目要求: 自然数n < 10^100, 则可知所求的和sum < 900, 也就是和最多只能是三位数.利用C语言提供的getchar(), 每次读入...原创 2017-10-08 16:40:00 · 48 阅读 · 0 评论 -
1003. 我要通过!(20)
原题: https://www.patest.cn/contests/pat-b-practise/1003实现思路:形如aPbTc, 输出答案正确.a可以是0个或多个Ab可以是1个或多个Ac可以是0个或多个A假设a, b, c分别包含x, y, z个A, 则必须必须满足x * z = y完整代码:#include <stdio.h>int isPATSt...原创 2017-10-08 16:36:00 · 56 阅读 · 0 评论 -
1001. 害死人不偿命的(3n+1)猜想 (15)
原题: https://www.patest.cn/contests/pat-b-practise/1001实现代码:#include <stdio.h>;int main() { int n; int step = 0; scanf("%d", &n); while (n != 1) { if (n % 2 =...原创 2017-10-08 16:35:00 · 56 阅读 · 0 评论 -
单链表排序
从大到小排序.链表带头结点, 链表不动, 只对链表里的值进行排序.#include <stdio.h>#include <stdlib.h>#include <time.h>struct list { int data; struct list *next;};typedef struct list s_list;ty...原创 2017-10-08 11:49:00 · 67 阅读 · 0 评论 -
1004. 成绩排名 (20)
原题: https://www.patest.cn/contests/pat-b-practise/1004实现思路: 利用结构体定义学生信息, 简单循环即可实现功能. 注意, 本题最好不要使用结构指针.完整代码:#include <stdio.h>struct student { char name[20]; char no[20]; i...原创 2017-10-08 16:37:00 · 46 阅读 · 0 评论 -
C语言自带快速排序对比插入排序
#include <stdio.h>#include <stdlib.h>#include <time.h>void getRandomArr (int arr[], int n);void printArr (int arr[], int n);void swap (int arr[], int i, int j);void inser...原创 2017-10-15 16:35:00 · 91 阅读 · 0 评论 -
1010. 一元多项式求导 (25)
原题: https://www.patest.cn/contests/pat-b-practise/1010实现思路: 首先多项式的存储直接用数组, 读数的时候需注意, 按照题目的描述我们需要, 当输入为'\n'时结束读数, 所以这里需要用到getchar, 求导比较简单i每次循环加2, 按照要求存放即可.#include <stdio.h>// input: 3...原创 2017-10-13 15:15:00 · 45 阅读 · 0 评论 -
1009. 说反话 (20)
原题: https://www.patest.cn/contests/pat-b-practise/1009题意理解: 输入的开头有可能有空格, 输出的末尾经过我测试也可以有多余的空格.实现思路: 本题如果用语言内置分割函数实现非常简单, 但是那样做显然不符合道义.下面我用C语言实现, 不使用任何内置函数.总体思路就是, 手动按照空格拆分字符串, 最后倒序输出.完整实现:#i...原创 2017-10-13 15:14:00 · 47 阅读 · 0 评论 -
1007. 素数对猜想 (20)
原题: https://www.patest.cn/contests/pat-b-practise/1007关于素数判断C语言实现请参考:http://www.cnblogs.com/asheng2016/p/7647278.html分析题意: 题目是让我们得出[2, n]中所有的素数对个数, 例如2 3 5 7 11 13 17 19,那么输出4.实现思路: 比较直接的方法就是...原创 2017-10-13 15:10:00 · 51 阅读 · 0 评论 -
1006. 换个格式输出整数 (15)
原题: https://www.patest.cn/contests/pat-b-practise/1006实现思路:读入的n有三种情况, 3位数, 2位数, 1位数, 分别判断, 输出即可.完整代码:#include <stdio.h>void printChar (int times, char ch);void printInt (int times);...原创 2017-10-13 15:09:00 · 52 阅读 · 0 评论 -
1011. A+B和C (15)
原题: https://www.patest.cn/contests/pat-b-practise/1011题目本身非常简单, 但有个小坑. 就是需要使用long int, 而且看样子PAT提供的编译器(gcc4.7.2), 使用scanf获取long int的值时, 需要使用%ld完整实现:#include <stdio.h>int main () { ...原创 2017-10-17 14:31:00 · 47 阅读 · 0 评论 -
1020. 月饼 (25)
原题: https://www.patest.cn/contests/pat-b-practise/1020实现思路:使用结构体, 这样库存和售价就能捆绑在一块, 然后对该结构体排序, 把最赚钱的月饼放在最前面.之后循环遍历月饼结构体, 每次把总收益, 和总共卖出的月饼都记录下来, 这样的话, 如果不需要取部分库存, 则判断需求和库存相等就OK, 如果需要取部分库存, 则我们的循...原创 2017-10-22 20:16:00 · 50 阅读 · 0 评论 -
1016. 部分A+B (15)
原题: https://www.patest.cn/contests/pat-b-practise/1016实现思路: 把输入全部当成字符串处理. 给定A, DA, 找出DA在字符串A中出现的次数,接着就是知道了次数后, 接着就是根据DA和DA出现的次数, 求出PA, 问题迎刃而解.完整实现:#include <stdio.h>int part (char *st...原创 2017-10-22 20:11:00 · 41 阅读 · 0 评论 -
1018. 锤子剪刀布 (20)
原题: https://www.patest.cn/contests/pat-b-practise/1018实现思路: 剪刀石头布胜负只有6种情况, 加上平局3种情况, 一共9中情况,分别判断即可.完整实现:#include <stdio.h>void printWinGesture (int b, int c, int j);void judge (char ...原创 2017-10-22 20:14:00 · 51 阅读 · 0 评论 -
1017. A除以B (20)
原题: https://www.patest.cn/contests/pat-b-practise/1017实现思路: 核心代码其实就5行, 刚开始也想到要用字符串一个个处理, 但思路没打开.直到看到一位网友提示: "把草稿纸计算除法, 还原成代码就行". 才恍然大悟. 是的,解决本题, 首先要把草稿纸算除法弄明白.首先把A存在字符串里, 然后遍历A, 一位一位的考虑, 由于B...原创 2017-10-22 20:12:00 · 50 阅读 · 0 评论 -
1012. 数字分类 (20)
原题: https://www.patest.cn/contests/pat-b-practise/1012完整实现:#include <stdio.h>int main () { int a1 = 0; int a2 = 0; int a3 = 0; float a4 = 0.0; // a4是浮点数 int a5 = 0;...原创 2017-10-17 14:32:00 · 63 阅读 · 0 评论 -
1013. 数素数 (20)
原题: https://www.patest.cn/contests/pat-b-practise/1013实现思路: 实现构建一个1万空间的数组, 里面存放前1万个素数, 之后正常输出即可.核心还是, 怎么判断一个数是不是素数.完整实现:#include <stdio.h>#define MAXSIZE 10001int isPrime (int n);/...原创 2017-10-17 14:33:00 · 54 阅读 · 0 评论 -
1064. 朋友数(20)
原题: https://www.patest.cn/contests/pat-b-practise/1064思路: 最大的朋友证好是4 * 9 = 36, 开个40的整型数组, 读取的时候每个数当成字符串来读, 随后就遍历计算累加和, 存在整型数组里.实现:#include <stdio.h>#define LEN 40int main (void) { ...原创 2017-11-26 10:42:00 · 59 阅读 · 0 评论 -
1026. 程序运行时间(15)
原题: https://www.patest.cn/contests/pat-b-practise/1026实现思路: 就是转换输入格式的问题, 给秒转成"时分秒"显示格式.完整代码:#include <stdio.h>int main (void) { float CLK_TCK = 100.0; int c1; int c2; i...原创 2017-11-12 21:50:00 · 57 阅读 · 0 评论 -
C语言字符串/数组去重
输入: hello 输出: helo第一种实现: 不新开数组, 也就是原地去重.#include <stdio.h>#include <string.h>void removeDuplicate(char str[]);int main (void) { char name[] = "hello"; removeDuplicate(n...原创 2017-11-06 14:31:00 · 371 阅读 · 0 评论 -
1023. 组个最小数 (20)
原题: https://www.patest.cn/contests/pat-b-practise/1023实现思路: 按照程序正常读数, 你将得到类似这样的字符串"0015558", 也就是说如果有0, 0肯定是在最前面, 只需把最前面这个0, 与第一个不是0的进行交换即可.完整C语言实现:#include <stdio.h>int main () { ...原创 2017-10-22 20:16:00 · 43 阅读 · 0 评论 -
1022. D进制的A+B (20)
原题: https://www.patest.cn/contests/pat-b-practise/1022思路: 10进制转d进制, d的范围[2, 10], 与10进制转2进制操作方法一样, 注意0转成任何进制还是0完整C语言实现:#include <stdio.h>int main () { int a; int b; int n;...原创 2017-10-22 20:16:00 · 53 阅读 · 0 评论 -
1021. 个位数统计 (15)
原题: https://www.patest.cn/contests/pat-b-practise/1021完整C语言实现:#include <stdio.h>int main () { char str[1000]; int num[10] = {0}; char *ptr = str; int cur; int i; ...原创 2017-10-22 20:16:00 · 41 阅读 · 0 评论 -
1032. 挖掘机技术哪家强(20)
原题: https://www.patest.cn/contests/pat-b-practise/1032思路: 开个100K+的数组, 轻松搞定.完整实现:#include <stdio.h>int main (void) { int n; int stu[100001] = {0}; int no; int score; ...原创 2017-11-12 21:57:00 · 60 阅读 · 0 评论 -
1029. 旧键盘(20)
原题: https://www.patest.cn/contests/pat-b-practise/1029参考: https://github.com/Joshua-ZY/PAT实现思路: 如果以前做过字符串去重, 那么做这题可能会有点启发. 刚开始我用的方法很笨, 需要双重循环, 后来参考了网友的代码, 发现用一个128大小的ASCII数组来写, 非常简单.首先有一个思想非常...原创 2017-11-12 21:55:00 · 51 阅读 · 0 评论 -
1028. 人口普查(20)
原题: https://www.patest.cn/contests/pat-b-practise/1028实现思路: 创建一个结构体, 分别包含name, year, month, person首先录入全部人口信息, 边录入边过滤掉不合理的生日. 最后遍历合理人口数据, 找到最年长的人和最年轻的人即可.坑1: 题目中明确说了, 不会出现并列. 但根据测试, 有可能出现人口为0的...原创 2017-11-12 21:54:00 · 69 阅读 · 0 评论 -
1027. 打印沙漏(20)
原题: https://www.patest.cn/contests/pat-b-practise/1027实现思路: 假如把题目中的空格, 替换成+号, 那么一个测试输入输出如下:输入:19 *输出:*****+***++*+********2此题相信大家都有思路, 主要是注意坑.坑1: *号后面是不可以有空格的.坑2: 就算剩余符号个数为0, 仍然要把0打...原创 2017-11-12 21:52:00 · 58 阅读 · 0 评论 -
1030. 完美数列(25)
原题: https://www.patest.cn/contests/pat-b-practise/1030测试用例:// 正常测试10 82 3 20 4 5 1 6 7 8 9output: 8// 最小值不是第一项10 82 3 15 4 5 1 6 7 8 9output: 9// 最大值重复10 82 3 20 4 5 1 6 7 8 8outpu...原创 2017-11-12 21:56:00 · 50 阅读 · 0 评论 -
1063. 计算谱半径(20)
原题: https://www.patest.cn/contests/pat-b-practise/1063思路: 福利题实现:#include <stdio.h>#include <math.h>int main (void) { int n; int a; int b; int max = 0; // 最大平方和 ...原创 2017-11-26 10:45:00 · 60 阅读 · 0 评论 -
1065. 单身狗(25)
原题: https://www.patest.cn/contests/pat-b-practise/1065思路: 一眼看去题目中出现了很多大数字, 立马想到直接开大数组解决,刷到第65题了, 这点直觉必然要有. 我的做法是开了两个数组, 一个存放情侣的关系, 一个存放参加派对的访客. 要注意, 00000也是一个人, 所以0不能作为数组默认值, 换个其它的就行.提示大家一下...原创 2017-11-26 10:41:00 · 49 阅读 · 0 评论 -
1066. 图像过滤(15)
原题: https://www.patest.cn/contests/pat-b-practise/1066思路: 开胃小菜实现:#include <stdio.h>int main (void) { int m; int n; int a; int b; int c; char ch; int tmp; ...原创 2017-11-26 10:35:00 · 45 阅读 · 0 评论 -
1067. 试密码(20)
原题: https://www.patest.cn/contests/pat-b-practise/1067思路: 又是一题重点放在怎么读入数据的问题, 我采用的是这种%[^\n],题目没有说明用户输入的密码最大有多长, 本来我是想采用读取前21个字符这种操作来判断的, 但测试点无法通过, 索性直接开个500位的大数组完事,主要就是把以下特殊情况考虑到了, 就没问题了.用户的...原创 2017-11-26 10:34:00 · 52 阅读 · 0 评论 -
1070. 结绳(25)
原题: https://www.patest.cn/contests/pat-b-practise/1070思路: 这题就是玩文字游戏, 本来我站在正常人的思维上思考, 心说弄个最长的绳子,那就是找出最长的两个绳子之和, 再除以2就OK.而且题目说"原来两段绳子的长度就会减半", 这句话怎么理解, 如果理解成15/2 + 15/2那正好是测试输出给的答案, 但事实根据正确答案, ...原创 2017-11-26 10:29:00 · 76 阅读 · 0 评论 -
1069. 微博转发抽奖(20)
原题: https://www.patest.cn/contests/pat-b-practise/1069思路: 新开个数组维护一份中奖者名单, 用来判重复. 最关键的就是, 若果此人已经中过将, 继续判断下一个人, 因为一个人可能连续转发多条, 也就是需要循环判断, 直到直到一个全新的用户为止.实现:#include <stdio.h>#include <...原创 2017-11-26 10:31:00 · 66 阅读 · 0 评论