
编程
syqhit
这个作者很懒,什么都没留下…
展开
-
杭电acm1008
#include#include#includeusing namespace std;int main(){ int A,n; int a[100]; while(cin>>n) { if(n==0) { } else{ int sum=0;原创 2016-04-13 17:43:59 · 450 阅读 · 0 评论 -
设计一个最优算法来查找一n个元素数组中的最大值和最小值。已知一种需要比较2n次的方法,请给一个更优的算法。
先遍历一遍数组,两个两个分成一组,小的放在左边大的放在右边,这样比较次数是N/2。N是数组的长度。然后最小的元素一定是在每组的左边,最大的元素在右边。下一步在左边的所有元素中比较N/2次产生最小的,在右边的元素中比较N/2次产生最大的。总共需要比较的次数是3*(N/2)次。代码如下#include #includeusing namespace std;int main()原创 2016-04-20 17:08:12 · 6993 阅读 · 0 评论 -
输出数组的全部组合
采用递归的思想。#include#include#includeusing namespace std;void combine(int arr[],int data[],int start,int end,int index,int r){ if(index==r) { for(int i=0;i {cout原创 2016-04-22 09:15:38 · 3274 阅读 · 0 评论 -
幸运数 47
一道关于幸运数的题目,不过我思路一定是错的。还没想出来怎么做,先mark一下吧。#include#include#include#include#includeusing namespace std;int main() {vectora;vectorb1;int aa,b;cin>>aa>>b;int temp=b;if(aa{原创 2016-04-22 11:01:16 · 1232 阅读 · 0 评论 -
替换字符串中的空格为%20
剑指offer上面的一道题。例如字符串是we are happy.输出 we%20are%20happy.如果按照基本的思路从前到后遍历字符串,每次识别到空格后面的字符就要往后移动两个位。因此用从后向前的方式先计算出替换后的数组的长度。设置两个指针一个指向新数组的尾部,另一个指向原来数组的尾部。直到两个指针的数值相同时表示遍历完成。代码如下。#include#includ原创 2016-04-22 16:30:26 · 1370 阅读 · 0 评论 -
编程之美的题目
最近在看编程之美,对于上面几道题简单整理下来,便于以后查看1.求二进制中1的个数 (1)根据二进制数的换算方法,一个数除以2,原来的数字减少一个0,如果结果有余数,则说明当前位置是1 (2)用二进制数与1,如果结果是1,表示最后一位是1,然后数字右移一位,循环操作 (3)V&(V-1)2.阶乘问题给定一个整数原创 2016-05-18 18:14:27 · 637 阅读 · 0 评论 -
杭电2032 杨辉三角
#include#include#include#include#include#includeusing namespace std;int main(){ int n; int a[31][31]={0}; for(int i=1;i<=30;i++) { for(int j=1;j<=i;j++) {原创 2016-05-18 20:02:57 · 390 阅读 · 0 评论 -
杭电acm 2017统计字符串中数字的个数
#include#include#includeusing namespace std;int main(){ int n; string s; cin>>n; while(n--) { int sum=0; cin>>s; for(int i=0;i<=s.size();i++) {原创 2016-05-18 20:04:21 · 368 阅读 · 0 评论 -
两个链表的第一个公共结点
先便利一遍两个链表,求出两个链表的长度,长的链表先走两个链表长度的差值步。然后两个链表一起走,到达的第一个相同节点就是第一个公共节点。ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2) { ListNode *p1=pHead1; ListNode *p2=pHead2; int le原创 2016-06-02 20:58:27 · 222 阅读 · 0 评论 -
层次遍历二叉树
采用指针的方式实现二叉树的层次遍历#include #include#include#includeusing namespace std;struct TreeNode{ int key; TreeNode* left; TreeNode* right;};void PrintNodeByLevel(TreeNode* root){ if(root原创 2016-04-28 14:45:10 · 458 阅读 · 0 评论 -
斐波那契数列
输出斐波那契数列的第n项第一个想到的是用通项公式,这个最简单。但是第一次提交没有成功,后来看了看是丢失精度问题。 int fib1(int n) { double a=(1+sqrt(5))/2.0; double b=(1-sqrt(5))/2.0; if(n==1||n==2) return 1; else return (p原创 2016-05-21 12:07:55 · 236 阅读 · 0 评论 -
vector 用法
vector使用很方便输入方式1.直接手动输入vector v; v.push_back(0); v.push_back(1); v.push_back(3); v.push_back(0); v.push_back(12);输入方式2,键盘输入,未知数组的大小vectorv;while(cin>>a){v.push_back(a);}输原创 2016-04-20 16:39:05 · 632 阅读 · 0 评论 -
杭电acm统计字符
这题要注意从键盘输入字符串的时候用cin函数,识别到空格会自动停止,因此要用getline(cin,str),str是要输入的字符串。Problem Description统计一个给定字符串中指定的字符出现的次数 Input测试输入包含若干测试用例,每个测试用例包含2行,第1行为一个长度不超过5的字符串,第2行为一个长度不超过80的字符串。注意这里的字符串包含空原创 2016-04-30 23:37:20 · 1341 阅读 · 0 评论 -
杭电acm1870愚人节的礼物
问题思路是识别到除了(和)以外的字符就停止识别,其实题目说了只有B字符,也可以识别到B字符的时候break.识别过程中(数字加一,)数目减一。Problem Description四月一日快到了,Vayko想了个愚人的好办法——送礼物。嘿嘿,不要想的太好,这礼物可没那么简单,Vayko为了愚人,准备了一堆盒子,其中有一个盒子里面装了礼物。盒子里面可以再放零个或者多个盒子。假设放原创 2016-04-30 23:33:42 · 1059 阅读 · 0 评论 -
杭电1061
Problem DescriptionGiven a positive integer N, you should output the most right digit of N^N. InputThe input contains several test cases. The first line of the input is a single integer T原创 2016-04-13 20:16:08 · 331 阅读 · 0 评论 -
构建链表 c++
构建一个链表。头插法和尾插法#include using namespace std;struct ListNode{ int m_key; ListNode* next;};void creatNodeList(ListNode *phead){ ListNode *p=phead; for(int i=1;i原创 2016-04-27 11:01:41 · 355 阅读 · 0 评论 -
链表 倒序输出
倒序输出可以用先逆转链表在顺序输出的思路。在不改变链表的结构的前提下,用栈来实现先进后出的目的。void PrintReverse(ListNode*phead){ std::stacknodes; ListNode*pNode=phead; while(pNode!=NULL) { nodes.push(pNode);原创 2016-04-27 11:16:17 · 416 阅读 · 0 评论 -
杭电1196
#include#include#include#includeusing namespace std;int main(){ int i,x,z,result; while(cin>>x) { if(x==0) { } else{ int j=0; i原创 2016-04-14 16:38:44 · 343 阅读 · 0 评论 -
重建二叉树
经典的题目,已知一颗树的前序遍历和中序遍历,求这个树的后序遍历。#include #include#includeusing namespace std;struct TreeNode{ int key; TreeNode* left; TreeNode* right;};TreeNode* CreateTree(int *pre_order,int pr原创 2016-04-28 11:19:12 · 294 阅读 · 0 评论 -
杭电1012
#include#include#include#includeusing namespace std;int fun(int x){ int a[11]; a[0]=1; for(int i=1;i { a[i]=i*a[i-1]; } return a[x];}int main()原创 2016-04-13 19:25:54 · 400 阅读 · 0 评论 -
建立一棵二叉树
采用递归的方法建立一棵二叉树,虽然很简单的算法,真正写起来确是漏洞百出,果然还是基础不够扎实。struct TreeNode{ char key; TreeNode* left; TreeNode* right;};TreeNode* CreatTree(){ TreeNode *T = new TreeNode; char a; cout<原创 2016-04-29 09:35:55 · 4241 阅读 · 0 评论 -
杭电2014
#include #include#include#includeusing namespace std;int main(){ int n; double X; while(cin>>n) { double a[100]={0}; double max1=0; double mi原创 2016-04-16 22:54:56 · 529 阅读 · 0 评论 -
杭电acm2015
#include #includeusing namespace std;int main(){ int n; int m; int temp; int ave; while(cin>>n) { int sum=0; int num=0; cin>>m;原创 2016-04-17 00:03:56 · 512 阅读 · 0 评论 -
杭电1004
杭电1004题原创 2016-04-09 16:20:53 · 423 阅读 · 0 评论 -
动态规划之LCS问题
LCS是最长公共子序列问题它不要求所得的字符在所给的字符串中是连续的。这是一道经典的动态规划题目。如果Xm=Yn,LCS(Xm,Yn)=LCS(Xm-1,Yn-1)+1;当Xm不等于Yn时,max(LCS(Xm-1,Yn),LCS(Xm,Yn-1));算法代码如下:int c[100][100];int LCS_LENGTH(const char*X,const char*Y原创 2016-07-07 10:16:52 · 410 阅读 · 0 评论