![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
做过一些有趣的题
一起学习,一起进步
魏尔肖
如果生命没有起伏那么何来意义
展开
-
c语言linux编写进度条
编写一个简单的进度条首先需要注意几个点,第一回车和换行的区别,回车为\n,指从后面回到这一行的第一列,换行为\r,指从本行移至下一行,不改变列的位置,所以平时的ENTER键是回车加换行,第二点缓冲区,输入输出流都会有缓冲,所以ffulsh(stdout)刷新输出流,编译没问题最好用makefile一下,先touch makefile一个文件,然后vim打开编辑原创 2017-02-17 20:34:11 · 855 阅读 · 1 评论 -
排序相关面试题总结
旋转数组中的最小元素如{3,4,5,1,2},就是{1,2,3,4,5}左旋两个得到,因为数组可以分为两个递增的部分,左边大于右边,用二分法的思想,中间元素如5大于2,说明5在左边部分,最小元素在右半部分,缩小区间到{5, 1, 2}之间。时间复杂度为O(logN). 注:如果左边元素与右边元素中间元素相同,需要另外处理。如{1,1,1,0,1}和{1,0,1,1,1}都是旋转数组,无法用二分法判原创 2017-07-26 20:55:33 · 1140 阅读 · 0 评论 -
查并集(朋友圈问题)
假设有A,B,C,D,E,5个人A,B在一个朋友圈内,B,C在一个朋友圈内,这样A,B,C就在一个朋友圈内,总共有多少个朋友圈。 当人数较多时不容易算出。 可以利用数据结构查并集。 设5个人的初值为-1,用数组下标代替A,B,C,D,E A,B在一个朋友圈,设A为根,B的值替换为A的下标,将A,B合并,A加上B本身的值为-2代表朋友圈内有两个人,当所取得值为负数时为根,为正数时代表所在朋原创 2017-07-24 16:11:03 · 5003 阅读 · 1 评论 -
模重复平方算法
今天在做diffie_hellman加密中需要求一个数很多次方模另一个数,如 44^36mod97,这时用模重复平方算法就可以快速计算出结果。#include <iostream>using namespace std;size_t repeatMod(size_t base, size_t n, size_t mod){ size_t a = 1; while(n)原创 2017-04-24 23:23:01 · 8547 阅读 · 1 评论 -
翻转字符串
原题:将字符串“happy are we”翻转为“we are happy”#include #include char* Strrev(char* start, char* end){ char* ret = start; assert(start && end); while (start < end) { char temp = *start; *star原创 2017-03-30 20:50:07 · 331 阅读 · 0 评论 -
数组全排列递归实现
将一个数组元素所有的排列方式列出。使用递归的方法所有元素的全排列转化为一部分。 例如: 1 2 3的全排列就是1 2 3, 1 3 2, 2 1 3, 2 3 1, 3 1 2, 3 2 1,用递归的方法就是1加上2 ,3全排列,然后1和2换位,2加上1,3的全排列,然后把3换到最前面加上1,2的全排列,同样的如果是4个数就是第一位加上后面的全排列,然原创 2017-04-09 20:42:37 · 1878 阅读 · 0 评论 -
二分查找方法
二分二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复原创 2017-04-03 11:52:23 · 665 阅读 · 0 评论 -
大数乘法
#include #include #include using namespace std;char* resver (char* dest) //字符串翻转{ char *start = dest; char *left = dest; char ch; while (*dest++)原创 2017-03-18 15:27:31 · 383 阅读 · 0 评论 -
C语言 定义一个宏,用于交换一个二进制序列的奇数位和偶数位
#include #define SWAP_BIT(NUM) NUM=((((NUM)&0x5555555555)>1))原创 2016-11-06 19:05:25 · 663 阅读 · 0 评论 -
模拟实现一个printf,函数可以实现my_printf("s ccc.","hello", 'n','i','h','a','o');//遇到s表示字符串
#include #include #include #include my_printf(const char* dest,...){ va_list arg; char *p=NULL; assert(dest); va_start(arg,dest); while(*dest) { if(*dest!='\0') { if (*de原创 2016-11-09 16:07:15 · 499 阅读 · 1 评论 -
C语言 判断一个字符串是否为另外一个字符串旋转之后的字符串
#include #include #include int check_s(char* str1, const char* str2){ assert(str1); assert(str2); strncat(str1, str1, strlen(str1)); if(strstr(str1, str2)==NULL) { return 0; }原创 2016-11-11 22:16:09 · 411 阅读 · 0 评论 -
C语言 strlen实现的三种方式
int my_strlen(const char* dest) //strlen第一种方式{ int count=0; assert(dest); while(*dest!='\0‘) { dest++; count++; } return count;}运用计数器int my_strlen(const char* dest) //strlen第原创 2016-11-16 22:00:06 · 627 阅读 · 0 评论 -
C语言 memmove函数实现
void *my_memmove(void *dest, void *src ,size_t n){ void *ret=dest; assert(dest!=NULL && src!=NULL); if (dest= ((char *)src+n)) { while (n--) { *(char *)dest=*(char *)src; dest原创 2016-11-16 22:12:55 · 891 阅读 · 0 评论 -
int *ptrl=(int*)(&a+1); int *ptr=(int*)((int)a+1) 这两个定义有什么区别
int main(){ int a[4] = { 1, 2, 3, 4 }; int *ptr1 = (int *)(&a + 1); int *ptr2 = (int *)((int)a + 1); printf( "%x,%x", ptr1[-1], *ptr2); return 0;}这是源代码,输出结果是4,20000000, 第一个ptr[-原创 2016-11-22 13:39:09 · 1689 阅读 · 0 评论 -
Word Break && Word Break II
leetcode上面的两道动态规划题。 题目1 Word Break Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words. For example, g原创 2017-08-24 00:18:31 · 1236 阅读 · 0 评论