算法
让我们荡起双脚
信言不美,美言不信。
善者不辩,辩者不善。
知者不博,博者不知。
圣人不积,既以为人己愈有,既以与人己愈多。
天之道,利而不害;圣人之道,为而不争。
展开
-
找出一组数据中多次出现的所有数字(空间要求最低)
#include <iostream>#include <bitset>#include <map>using namespace std;void CheckDuplicates(int *array, int len){ bitset<40000> bt1; bitset<40000> bt2; for (int i = 0; i < len; i++)原创 2015-09-17 20:35:39 · 579 阅读 · 0 评论 -
算法题:确定两串乱序同构
题目描述给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。这里规定大小写为不同字符,且考虑字符串重点空格。给定一个string stringA和一个string stringB,请返回一个bool,代表两串是否重新排列后可相同。保证两串的长度都小于等于5000。 测试样例:“This is nowcoder”,”is This nowcoder”返回:true“原创 2015-08-18 13:36:56 · 816 阅读 · 0 评论 -
算法题:求指定数组中和为N的出现的所有组合(二)
#include <iostream>#include <malloc.h>using namespace std;void deal_sum(int a[],int n,int val){ int count = 1; int m = n; int *b= (int*)calloc(0,n); while(m--) { count*=2原创 2015-08-31 13:21:39 · 5790 阅读 · 0 评论 -
笔试题:用二叉树构造双向链表
#include <iostream>#include <string.h>using namespace std;struct Node{ Node *left;//相当于双向链表的prev指针。 Node *right;//相当于双向链表的next指针。 char data; Node(char d = char()):data(d),left(NULL)原创 2015-08-31 16:43:47 · 712 阅读 · 0 评论 -
算法题:前缀表达式的运算
输入描述:输入包含多组数据,每组数据包含两行。第一行为正整数n(3≤n≤50),紧接着第二行包含n个由数值和运算符组成的列表。“+-*/”分别为加减乘除四则运算,其中除法为整除,即“5/3=1”。输出描述:对应每一组数据,输出它们的运算结果。输入例子:3 + 2 3 5 * + 2 2 3 5 * 2 + 2 3输出例子:5 12 10#include <iostream>#incl原创 2015-08-16 01:04:51 · 3060 阅读 · 0 评论 -
算法题:杨辉三角打印
#include <iostream>#include <vector>using namespace std;string Add(string s1,string s2){ string my_str1(s1.rbegin(),s1.rend()); string my_str2(s2.rbegin(),s2.rend()); int len1 = my_str1原创 2015-08-15 23:35:34 · 791 阅读 · 0 评论 -
算法题:求一个数组中和为sum的所有组合
#include <iostream>#include <list>using namespace std;void Get_Sum(int sum,int n,int a[],list<int>& lst){ if(sum<=0 || n<0)return; if(sum==a[n]) { lst.push_back(a[n]); lis原创 2015-08-31 00:14:53 · 5330 阅读 · 3 评论 -
算法:KMP算法
#include #include #include using namespace std;void CreateNext(int a[],char *str){ int n = strlen(str); a[0]=0; int flags = 0; for(int i=1;i<n;i++) { if(str[i]==str[flags]) { a[i]原创 2015-08-30 21:47:00 · 691 阅读 · 0 评论 -
算法题:n个括号的合法全排列
#include <iostream>#include <string.h>#include <stack>using namespace std;//n个括号的合法全排列.bool Grial(char *str){ stack<char> st; char *p = str; while (*p != '\0') { if (*p ==原创 2015-08-03 21:56:10 · 1889 阅读 · 0 评论 -
算法题:四则运算(中缀式到后缀式的转换,值得思考的逆波兰式)
/*字符串的四则运算。给出一个字符串,包含0~9的数字和 + -*\/ ()的运算符,- 仅代表减号不代表负数。举例如下:输入:1 + 2 * (3 - 4)*///哈哈,看到这道题,其实一点也不难,这个题根本就不用思考,//当然是你明白算法之后,这里要用到的算法是逆波兰式。//如果你有不明白的地方,可以上网搜逆波兰式。/*我的总结:计算机无法理解人类的正向思维,于是为了满足计算机的原创 2015-08-03 12:38:00 · 1405 阅读 · 2 评论 -
编程马拉松:电话号码
题目描述上图是一个电话的九宫格,如你所见一个数字对应一些字母,因此在国外企业喜欢把电话号码设计成与自己公司名字相对应。例如公司的Help Desk号码是4357,因为4对应H、3对应E、5对应L、7对应P,因此4357就是HELP。同理,TUT-GLOP就代表888-4567、310-GINO代表310-4466。NowCoder刚进入外企,并不习惯这样的命名方式,现在给你一串电话号码原创 2015-08-15 16:41:58 · 879 阅读 · 0 评论 -
算法题:数字分类
题目描述给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:A1 = 能被5整除的数字中所有偶数的和;A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4…;A3 = 被5除后余2的数字的个数;A4 = 被5除后余3的数字的平均数,精确到小数点后1位;A5 = 被5除后余4的数字中最大数字。输入描述:每个输入包含1个测试用例。每个测试用例先给出一个不超过100原创 2015-08-14 11:55:44 · 2243 阅读 · 0 评论 -
算法题:阶乘尾零
题目描述请设计一个算法,计算n的阶乘有多少个尾随零。给定一个int n,请返回n的阶乘的尾零个数。保证n为正整数。 测试样例:5返回:1#include <iostream>using namespace std;int Grial(int x){ int temp = x; int count2 = 0; int count5 = 0; while (tem原创 2015-08-18 13:46:04 · 865 阅读 · 0 评论 -
算法题:最大递增数组个数
#include <iostream>using namespace std;//求数组最长递增元素个数。int addadd(int a[],int n){ if (n <= 0)return 0; int i = 0; int count = 0; int max = 1; int *b = new int[n]; for (; i < n原创 2015-08-05 15:22:50 · 922 阅读 · 0 评论 -
算法:只用最少栈结构构造顺序栈
#include <iostream>#include <stack>using namespace std;class STACK{public: void Push(int val) { stack<int> temp; temp.push(val); while (st.empty() == false) {原创 2015-10-02 11:49:40 · 565 阅读 · 0 评论 -
算法题:矩阵旋转90度
#include <iostream>#include <iomanip>using namespace std;void Grial(int (*a)[5],int n){ //数组顺时针旋转90度。 //边界值的考虑让我小小的思考了一下。 int temp; int startX = 0; int startY = 0; int j = 0原创 2015-08-21 20:29:28 · 2269 阅读 · 0 评论 -
算法:矩阵右移
#include <iostream>#include <iomanip>using namespace std;//数组右移m位,左边补0;//如:1 2 3// 4 5 6// 7 8 9//右移动2位的结果是:// 0 0 1// 0 0 4// 0 0 7void Grial(int(*a)[4], int n,int m){ fo原创 2015-08-21 20:59:21 · 2056 阅读 · 0 评论 -
算法:之字形来回打印矩阵
#include <iostream>#include <iomanip>using namespace std;//之字形状打印,如://1 2 3 //4 5 6//7 8 9//打印结果是:1 4 2 3 5 7 8 6 9。void PrintfDown(int (*a)[3],int &i,int &j){ while (1) {原创 2015-08-21 21:54:43 · 1815 阅读 · 0 评论 -
算法题:二进制的插入
题目描述有两个32位整数n和m,请编写算法将m的二进制数位插入到n的二进制的第j到第i位,其中二进制的位数从低位数到高位且以0开始。给定两个数int n和int m,同时给定int j和int i,意义如题所述,请返回操作后的数,保证n的第j到第i位均为零,且m的二进制位数小于等于i-j+1。 测试样例:1024,19,2,6返回:1100class BinInsert {public:原创 2015-08-21 16:25:44 · 1041 阅读 · 0 评论 -
笔试题:o(n)解法求最大回文串(Manacher)
#include <iostream>using namespace std;void Grial(char *s){ int maxindex = 0;//init max length int maxstart = 0; int b[100]={0}; string str; string resultStr; str+='@';原创 2015-09-06 21:03:37 · 567 阅读 · 0 评论 -
笔试题:动态规划之求数组中的最长路径
#include <iostream>using namespace std;void Grial(int (*a)[5],int (*b)[5],int x, int y){ if(x>=5 || y>=5)return ; int i = x; int j = y; if(i-1>=0 && j-1>=0) b[原创 2015-09-06 08:06:06 · 1426 阅读 · 0 评论 -
算法题:数组中只出现一次的两个数字
class Solution {public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { int count = 0; int n = data.size(); if(n<2) { *num1=0;原创 2015-09-06 01:43:56 · 507 阅读 · 0 评论 -
算法题:二叉树的构造
#include using namespace std;templatestruct Node{ Node *right; Node *left; Type data; Node(Type d = Type()) :data(d), right(NULL), left(NULL){}};templateclass MyTree{public: MyTree() :原创 2015-08-07 14:28:18 · 999 阅读 · 0 评论 -
欢迎来挑战:极限打印99乘法表
#include <iostream>using namespace std;int main(){ //凡是有两个for,while循环的,有 if,有?:的,有Switch的全部Out! int count = 1; int sum = (1 + 9) * 9 / 2; int flags = 1; for (int i = 1; i <= sum;原创 2015-09-03 15:34:50 · 801 阅读 · 0 评论 -
算法题:求一个数的1/3,1/7,1/15,1/31,/1/63.....
#include using namespace std;class DiViBy{ public: static int DiVi(int val,int n) { int count = 0; int m = n; while(m) { m/=2; count++; } int result = 0; while(val > n) {原创 2015-08-18 21:03:42 · 744 阅读 · 0 评论 -
算法题:德才论
题目描述宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人。”现给出一批考生的德才分数,请根据司马光的理论给出录取排名。输入描述:输入第1行给出3个正整数,分别为:N(<=105),即考生总数;L(>=60),为录取最低分数线,即德分和才分均不低于L的考生才有资格原创 2015-08-14 18:18:08 · 1582 阅读 · 0 评论 -
算法题:福尔摩斯的约会
题目描述大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间“星期四 14:04”,因为前面两字符串中第1对相同的大写英文字母(大小写有区分)是第4个字母’D’,代表星期四;第2对相同的字符是’E’,那是第5个英文字母,代表一天里的第14原创 2015-08-14 13:38:00 · 829 阅读 · 0 评论 -
算法题:统计学生成绩
题目描述 本题要求读入N名学生的成绩,将获得某一给定分数的学生人数输出。输入描述: 输入在第1行给出不超过105的正整数N,即学生总人数。随后1行给出N名学生的百分制整数成绩,中间以空格分隔。最后1行给出要查询的分数个数K(不超过N的正整数),随后是K个分数,中间以空格分隔。输出描述: 在一行中按查询顺序给出得分等于指定分数的学生人数,中间以空格分隔,但行末不得有多余空格。输入例子: 106原创 2015-08-13 03:05:17 · 3888 阅读 · 0 评论 -
算法题:链表的递归逆序
#include <iostream>using namespace std;struct Node{ int data; Node *next; Node(int d = int()) :data(d), next(NULL){}};class Clist{public: Clist(int a[], int n) :first(NULL) {原创 2015-07-31 10:12:21 · 831 阅读 · 0 评论 -
算法题:统计个位数个数
题目描述给定一个k位整数N = dk-1*10k-1 + … + d1*101 + d0 (0<=di<=9, i=0,…,k-1, dk-1>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定N = 100311,则有2个0,3个1,和1个3。输入描述:每个输入包含1个测试用例,即一个不超过1000位的正整数N。输出描述:对N中每一种不同的个位数字,以D:M的格式在一行中输出该位数字D及原创 2015-08-13 13:28:06 · 2889 阅读 · 0 评论 -
笔试题:360找镇长的题。
题目描述: 多个镇里面有n个人在选镇长,在每一个村里面选择一个所有村名(1…n标记)都认识的人,(这个人可以不认识所有人),如果有多个人则同时列出来。#include <iostream>#include <string.h>using namespace std;struct Node{ int index; Node *next; Node(int d =原创 2015-08-12 12:03:51 · 1676 阅读 · 0 评论 -
算法题:求解两个链表的交集
/*已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A = { 5, 10, 20, 15, 25, 30 },集合B = { 5, 15, 35, 25 },完成计算后A = { 10, 20, 30 }。*/#include <iostream>using namespace s原创 2015-07-31 09:48:38 · 5534 阅读 · 1 评论 -
算法题:给你一个自然数N,求[6, N]之内的所有素数中, 两两之和为偶数的那些偶数。
/*算法题:给你一个自然数N,求[6, N]之内的所有素数中,两两之和为偶数的那些偶数。*/#include <iostream>using namespace std;void Grial(int n){ int *b = new int[n]; int k = 0; b[k++] = 2; b[k++] = 3; b[k++] = 5;原创 2015-07-31 00:25:56 · 1924 阅读 · 3 评论 -
算法题:压缩任意字符串
//通过键盘输入一串任意字符串。//请编写一个字符串压缩程序,将字符串中连续出//席的重复字母进行压缩,并输出压缩后的字符串。/*如:输入AABBCC,输出2A2B2C;输入,,,..,输出3,2.。*/#include <iostream>#include <string.h>#include <stdlib.h>using namespace std;void Grial(ch原创 2015-07-31 01:02:30 · 1367 阅读 · 2 评论 -
算法题:不使用+-×/求一个数的7倍
#include <iostream>#include <stdlib.h>#include <stdio.h>using namespace std;int Grial(int n){ int a=n<<3; int b=a&(-n); int temp; a=a^(-n); while(b!=0) { b=b<<1; te原创 2015-08-11 23:03:53 · 1100 阅读 · 0 评论 -
算法题:求二进制位中0的个数
#include <iostream>using namespace std;//古有求二进制数中1的个数,今有求二进制中0的个数。int Grial(int x){ int count = 0; while (x + 1) { count++; x |= (x + 1); } return count;}int m原创 2015-08-10 00:20:16 · 6041 阅读 · 4 评论 -
算法题:最长上升子序列
题目描述 广场上站着一支队伍,她们是来自全国各地的扭秧歌代表队,现在有她们的身高数据,请你帮忙找出身高依次递增的子序列。 例如队伍的身高数据是(1、7、3、5、9、4、8),其中依次递增的子序列有(1、7),(1、3、5、9),(1、3、4、8)等,其中最长的长度为4。 输入描述:输入包含多组数据,每组数据第一行包含一个正整数n(1≤n≤1000)。紧接着第二行包含n个正整数m(1≤n≤1000原创 2015-08-24 16:46:23 · 888 阅读 · 0 评论 -
有趣的C/C++语言
#include using namespace std;int main(){ int i = 0; cout<<sizeof(i++)<<endl; cout<<i<<endl; //4 //0 }#include using namespace std;int main(){ unsigned int a = 3; int b = -6; cout6?原创 2015-08-22 23:41:15 · 1286 阅读 · 0 评论 -
算法题:到底买不买
题目描述小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。为方便起见,我们用[0-9]、[a-z]、[A-Z]范围内的字符来表示颜色。例如,YrR8RrY是小红想做的珠串;那么ppRYYGrrYBR2258可以买,因原创 2015-08-13 13:09:48 · 1492 阅读 · 0 评论 -
算法题:查验省份证
题目描述 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值: Z:0 1 2 3 4 5 6 7 8 9 10 M:1 0 X 9 8 7 6 5 4 3 2现在给原创 2015-08-13 01:02:21 · 1104 阅读 · 0 评论