- 博客(31)
- 收藏
- 关注
原创 动态规划解决硬币问题
给你一些面值为{1,3,5}的硬币,用它凑够价值为N的一个数,找出用硬币数量最少的方法。硬币:int coins[] = {1,3,5} 需要找的钱:n 需要的数量:solu[] 路径:dp[]#include "stdafx.h"#include<iostream>#include<vector>void solution(int* coins, int value, int* solu
2016-08-22 15:00:49
602
原创 C语言 O(1)的时间删除链表节点
思路: 由于删除单链表的节点需要知道的是此节点的前一个节点,所以将此节点与其后的节点交换,再删除后一个节点,便可达到删除此节点的目的。struct node//节点类型{ int val; node* next;};node* p;//给出的节点p->val = p->next->val;node* tmp = p->next;p->next = tmp->ne
2016-05-10 21:14:23
344
原创 C语言 整数的整数次方(不考虑大数问题)
#include<stdio.h>int doublepow(int n, int m){ int i = 1; int sum = n; for(i = 1; i< m; i++) { sum = sum * n; } return sum;}int main(){ int n; int m; scan
2016-05-10 21:08:50
1072
原创 C语言 二进制中1的个数
思路: 每个二进制的数字%2可以判断出它的最低一位是不是1,所以给这个数字每次%2,然后右移一位,直到这个数字等于0,即可判断出每一位是不是1。#include<stdio.h>int num1(int n){ int num = 0; while(n>0) { if(n%2 == 1) { num++;
2016-05-10 21:07:47
578
原创 C语言 打印1到最大的N位数(输入3,打印1,2,3~999)
#include<stdio.h>int print(int n){ int sum = 10; int i = 0; for(i = 1; i<n; i++) { sum*=10; } for(i = 1; i<sum; i++) { printf("%d ",i); } printf("\
2016-05-10 21:05:06
523
原创 C语言 调整一个数组的顺序,使得奇数在总在偶数的前边
思路: 类似快速排序中的POTITION函数,用两个指针,一个指针P1依次向后遍历判断是不是奇数,另一个P2保持一个特性,就是P2指针前的数字都是P1判断过的奇数,后面一直到P1指针的位置都是判断过的偶数,当P1新找到一个奇数时,将P2++后并与P1所指的数字进行交换,直到P1完成循环。#include<stdio.h>void potition(int arr[], int size){
2016-05-10 21:02:01
585
原创 C语言 斐波那契数列
思路: 按照斐波那契数列的通项公式,可以用3个变量,一个保存当前求得的结果,两个保存求得此结果的项,循环可得任意一个项。#include<stdio.h>int fibonacci(int n){ int f1 = 0; int f2 = 1; int f = 0; if(n == 0) return 0; if(n == 1)
2016-05-10 20:56:03
717
1
原创 C语言 旋转数组的最小数字
思路: 类似二分查找,每次取中间的在数字,以此为分隔,判断两边的数组哪个是有序的,分析题意可知最小的数字定在无序的一端,在此端的数组内继续查找。#include<stdio.h>int potition(int arr[], int left, int right){ int key = left+right/2; if(arr[key] > arr[right])
2016-05-10 20:52:55
357
原创 C++ 重载=操作符
#include<stdio.h>#include<iostream>#inlcude<stdlib.h>class CString{public: CString() { m_str=NULL; } CString operator =(const CString &n_str) { if(this== &n_str
2016-05-04 16:33:49
323
原创 C++ 判断一个数是否在横向有序,纵向有序二维数组中
从数组右上角开始判断,如果KEY值大于此数,则不在这一行,如果KEY值小于这个数,则不在这一列#include<stdio.h>#include<iostream>int serch(int arr[][4],int key, int ref, int low, int *releft, int *reup){ int tem; int left = ref - 1;
2016-05-04 16:16:42
707
原创 C++ 给出一个链表的头结点,倒序打印链表
递归调用,先递归,再打印#include<iostream>#include<stdio.h>using namespace std;class list_node{public: int val; list_node* next;};void reshow(list_node* head){ if(head->next != NULL) {
2016-05-04 16:14:17
394
原创 C++ 设计一个类,只能生成一个对象
#include<iostream>using namespace std;class singleton{public: static singleton* getpsin() { if(psin == NULL) { psin = new singleton(); } return ps
2016-05-04 16:12:22
1968
原创 C++ 将“we are happy”中的空格替换成%20,即“we%20are%20happy”
#include<stdio.h>#include<stdlib.h>#include<string.h>int main(){ char c[100] = "we are happy"; int space_num = 2; int pos = strlen(c); int new_pos = pos + (2 * space_num); while
2016-05-04 16:11:04
418
原创 C++ 用两个栈实现一个队列
#include<iostream>using namespace std;class stack;class stack_node{ friend class stack;public: stack_node(int val, stack_node *p):value(val),next(p) {} ~stack_node() {}private
2016-05-04 16:09:04
250
原创 C++先序遍历与中序遍历生成二叉树 后序遍历与中序遍历生成二叉树
#include<iostream>#include<queue>#include<stack>using namespace std;template <class Type>class BinTreeNode;template <class Type>class BinTree;template <class Type>class BinTreeNode{ friend c
2016-05-04 16:06:40
546
原创 C 位段的内存分配
什么是位段?strucr code{ int c1 :7; int c2 :6; int c3 :19;} 这就是位段了。跟结构体很类似,不过他在每个成员的定义的后面多加了一个 : 跟一个数字,这个数字用来限定这个成员所占内存的bit位。这就是说,c1占了占7位,c2占了6位,c3占了19位,加在一起32位,才一个字节。这样,本来要占3个字节的结构体,现在一个字节就
2015-04-22 17:53:15
897
原创 C 最大子序列问题
问题描述: 给定一个数组,求出从某个数字开始,依次向后加N个数,这些数之和为整个数组中最大的 例:{-1,2,3,-3,5,-2} 求得结果为 2 加到 5。 思路: 从第一个数字开始,依次向后加,当和为负数时,剪掉前面的所有数字。(前面这些的和都是负的了,加到后面只会使值变小- -)当和为正数并大于以前的所得的和时,记录此时
2015-04-10 22:27:08
447
原创 C 单链表的顺序插入
思路: 向单链表中插入一个新值,需要插入位置前后的两个节点。 从根节点开始遍历,寻找插入的正确位置。struct node { int v; struct node *p; };int fun (struct node **rootp,int val){ struct node *current; struct node *previous; str
2015-04-09 12:50:54
624
原创 C 反转字符串 "abcd" --> "dcba"
#includevoid test(char *p){ static char *ep = p; char aa = *p; if(*p != '\0') test(p+1); else return; *ep = aa; ep++;}int main(){ char a[] = "abcd"; test(a); printf("%s\n",a);
2015-04-08 18:11:11
1016
原创 C 反转字符串中的单词 "student a am i " --> "i am a student "
#includevoid cpy(char *s, char **o){ while(**o!= '\0' && **o != ' ') { *s = **o; (*o)++; s++; } *s = '\0'; return;}void cpy2(char **s,char *o){ if(**s == '\0') { **s = ' '; (*s
2015-04-08 18:08:34
526
原创 C 这个字符串参数必须包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数。如果字符串参数包含了任何非数字字符,函数就返回零。
int at(char *p){ int sum=0; while(*p != '\0') { if( (*p) '9') return 0; sum = sum * 10 + (*p -'0'); p++; } return sum;}
2015-03-23 11:28:27
472
原创 C 将一个数字字符串转换成这个字符串对应的数字(包括正浮点数、负浮点数)
double att(char *p){ int sum = 0; int i = 0; int a = 1; double q; if(*p == '-') { a = -1; p++; } while(*p != '.') { sum = sum * 10 + (int)(*p - '0'); p++; } p++;
2015-03-23 11:27:10
466
原创 C 将一个数字字符串转换成该字符串对应的数字(包括正整数、负整数)
int aoi(char *p){ int sum = 0; int a = 1; if(*p == '-') { a = -1; p++; } while ( *p != '\0') { sum = sum * 10 + (*p - '0'); p++; } sum = sum * a; return sum;}
2015-03-23 11:25:58
918
原创 C 不使用额外变量统计字符串长度(递归)
#includeint my_strlen(char *);int main(){ char str[] = "abcefgh"; int i; i = my_strlen(str); printf("%d\n",i); return 0;}int my_strlen(char *p){ if ( *p == '\0' ) { ret
2015-03-20 13:03:40
313
原创 C 从字符串中提出子字符串
void ( char[] dst, char[] stc, int start, int len) /传入字符串,子字符串,开始位置,需要复制的长度/{ int j=0; for( ; j
2015-03-11 20:20:48
484
原创 C 二分查找
void fid( a[] , i ) //传入一个数组与其长度 { int left=0,right=i;while(right-left>1) { if( mid < a[((left+right)/2)] ) right = ((left+right)/2); if ( mid > a[((left+right)/2)] )
2015-03-11 20:15:13
388
原创 C 从标准输入读取源代码并在每一行前加上行标
#includeint main(){ int ch; int i=1; printf(" 0:\t"); while( ch=getchar() ) { if( ch=='\n') break; } while( ch=getchar() ) { if( ch=='\n') { printf(" %d:\t",i);
2015-03-06 17:40:07
646
原创 C 从标准输入读取C源代码,并验证所有的花括号都正确的成对出现
#include int main(){ int ch; int i=0; while( ch=getchar() ) { if( ch == '{' ) i++; if( i>=1 ) { if( ch == '}' ) i--; } if( ch == 'N' ) break; } if( i
2015-03-06 13:19:36
537
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人