ACM实训
夜间传说
努力学习,天天向上!
展开
-
zoj 1259 解答分析
火车进站问题给出,出火车站序列比如5 4 1 2 3 ,实际上我们要做的是将准备进站的序列1 2 3 4 5 分块放进一个栈式结构,然后出来,出来的顺序:栈顶要和目标的序列的第一个相同。否则失败。#include<iostream>#include<stack> using namespace std;/*2020/7/4*/ int main() { stack<int>s; int n; while(cin>>n&&原创 2020-07-04 18:36:38 · 678 阅读 · 0 评论 -
c++二进制转换,栈存储输出
#include<iostream>#include<stack> using namespace std;/*数制度转换,栈储存*/ int main() { stack<int>s; int n; cin>>n; while(n!=0) { s.push(n%2); n=n/2; } while(!s.empty()){ cout<<s.top(); s.pop(); } return 0;}原创 2020-07-04 17:08:01 · 186 阅读 · 0 评论 -
C++链表的直接插入排序
这是按照链表插入一个最小元素发展而来的排序,练练手。#include<iostream>using namespace std;struct node{ int data; node*next;}; node*create(int n){ node*head,*tail,*p; head=tail=new node; head->data=9999999;//安排一个很大的数 //可用浪费一小段空间的方法节省时间。 while(n--){ p=new node原创 2020-07-04 11:31:37 · 893 阅读 · 3 评论 -
C++逆置链表的元素,头插入法
分析:有一条链,按照一般思路,那就直接将最后一个元素的值和第一个元素的值对调就可以了。这个方法适合于数组。但是在链表操作的过程中我们发现我们并不能直接找到链表的尾部,如果要找,需要一次次遍历,这样,逆置一条链表将花费巨大的时间(O(n^2))。不过,我们可以考虑将链表的每个节点拆下来,然后用头插入的方法重新连接,这样就比较高效了。...原创 2020-07-03 11:02:09 · 487 阅读 · 0 评论 -
c++删除链表最小元素
创建带有头结点的链表,在删除和插入操作中会使算法更加简单高效。#include<iostream>using namespace std;struct node { int data; node* next;};//循环创建带有表头的链表: node* create(int n) { node* head, * tail, * p; head = tail = new node; head->data = 0; while (n--) { p = new nod原创 2020-07-02 23:19:15 · 1056 阅读 · 0 评论 -
C++尾插入链表_循环实现
#include<iostream>using namespace std;struct node{ int data; node*next;}; node*create(int n){ node*head,*tail,*p; head=tail=new node; head->data=0; //可用浪费一小段空间的方法节省时间。 while(n--){ p=new node; cin>>p->data; p->next=NULL原创 2020-07-02 22:48:50 · 173 阅读 · 0 评论 -
C++快速排序与二分查找的实现
快速排序用递归的方式实现,二分查找用循环的方法实现。也可以用qsort实现快速排序。一个小小的应用:要求两个集合的并集时,可以先对一个集合进行排序,再用二分查找会比较快。当然,改进的话可以对两个集合都进行排序,当找到某一位置时,直接将后面一大段移到另一个数组后面就可以了。#include<iostream>using namespace std;//快速排序void Qsort(int a[], int left, int right) { if (left >= right原创 2020-07-02 21:18:04 · 483 阅读 · 0 评论 -
c++颠倒数组元素位置
将数组元素颠倒,要将第一个和最后一个元素调换,第二个和倒数第二个元素调换。。。直到n/2次为止。#include<iostream>using namespace std;void reverse(int *a,int n){ int i,temp; for(i=0;i<n/2;i++){ temp=a[i]; a[i]=a[n-i-1]; a[n-i-1]=temp; } }int main() { int i,a[10]; for(i=0;i<10原创 2020-07-01 10:16:19 · 1571 阅读 · 2 评论 -
c++删除、增加一个数组元素
要删除某个数组元素只要将它后面的元素向前挪一个位置就可以了,将要删除的一个元素覆盖。int delete_arr(int *a,int pos,int n){ //pos为要删除的数组下标,n表示当前有多少个元素。 int i; for(i=pos;i<n;i++ )a[i]=a[i+1]; return n-1; } 而在数组中增加一个元素只需从最后一个元素依次向后挪一个位置,直到将要插入的位置空出来。#include<iostream>using namesp原创 2020-07-01 10:04:20 · 15546 阅读 · 2 评论 -
c++数制2~16数进制的转换
通项公式:while(n!=0){a[i]=n%d;n=(n/d);i++;}其中n为要转换的十进制的数。d为要转换的数制,如二进制为2.#include<iostream>using namespace std;int main() { int i,n,d,a[100];//n 为要转换的十进制数,d为要转为的数制 while(cin>>n>>d){ i=0; while(n!=0){ a[i]=n%d; n=(n/d);原创 2020-06-30 23:58:16 · 897 阅读 · 0 评论 -
c++斐波那契数列查找数组方法实现
查找数组是为了在多次计算斐波那契数列时减少重复的计算。扩展到其他的例子,需要递推公式计算结果的,可以考虑通过多开数组浪费空间的方法节省时间。#include<iostream>using namespace std;int main() { int i,j,n,maxn,a[100]; a[1]=a[2]=1; maxn=2; while(cin>>n){ if(n>maxn){ for(i=maxn;i<n;i++) a[i+1]=a[i原创 2020-06-30 23:10:42 · 921 阅读 · 0 评论 -
c/c++输入一整行字符串
cin.getline和gets都以回车键为结束一行的输入。#include<iostream>using namespace std;int main() { char buf1[2020]; //c语言,c++也用 gets(buf1); //c++ char buf2[2020]; cin.getline(buf2,2020); cout<<"----------"<<endl; cout<<buf1<<endl;原创 2020-06-30 22:54:44 · 1502 阅读 · 0 评论 -
ACM竞赛需要的基础知识
就快期末考试了,网课摸鱼了一个学期,赶紧复习一下上的ACM课程的知识。发现老师开头列的知识点好全面,先做个标记,分享一下给大家。原创 2020-06-30 22:30:05 · 1165 阅读 · 0 评论 -
c++头插入反序链表
一、知道个数的反序链表,用头插入的方法创建。具体实现是,先定义一个node*head=0;然后new一个节点(p=new node),将新的节点的next指向head,最后再让新new的节点的头挂到head上(head=p).#include <vector>#include <list>#include <map>#include <set>#include <string.h>#include <deque>#inc原创 2020-06-25 16:46:10 · 147 阅读 · 0 评论 -
poj 3750的链表实现
其实这道题用数组比较简单。不过为了更熟悉一些链表的操作,创建一个环状链表出来,直接模拟小孩数数出列的情况。题目链接:http://poj.org/problem?id=3750#include <iostream>#include <cstdio>#include <cstring>using namespace std;struct node { char name[20]; node* next;};//递归生成链表 node* creatno原创 2020-06-17 20:44:32 · 533 阅读 · 0 评论 -
zoj 2724 Windows Message Queue 优先队列修改优先级
这是一道优先队列的题目算法照着https://www.cnblogs.com/mfrbuaa/p/4468842.html敲的,在这个题目中,用printf,和scanf效率要比cin cout快三倍。注意: bool operator <(const Message a) const, 括号中的const表示参数a对象不会被修改,最后的const表明调用函数对象不会被修改! 如果换成 bool operator <( Message a)编译会报错!在修改优先级的时候,第二个参数比第一个小原创 2020-06-17 11:17:39 · 248 阅读 · 0 评论 -
zoj1063 Color Me Less
题目分析:本题是求给定的十六个点的集合,然后求给出的点到点集的最短的点。我们只需求三个点之间的平方就可以了,不用用题目的方式开方。用数组存开始的点。每次访问三个。然后求和。求出每个点的和进行比较,记录较小的点的下标。注意: int sum, sum0 = 100000000;每次循环都要将sum0进行初始化,否则会出错。本人小菜鸡一个,感谢您的阅读!#include <iostream>#include<cmath>using namespace std;int mai原创 2020-06-16 23:42:37 · 127 阅读 · 0 评论