- 博客(25)
- 收藏
- 关注
原创 数组反转后续:一定什么时候都要反转吗?
一定什么时候都要反转吗?答案是不用的。我在此出一道题目:输入一个数组,把数组中的元素倒序输出。当然,你可一选择思路1:把数组反转,再输出。但是,反转实际上是完全不必要的。只要按照反序输出即可。在大数据量的情况下,反转数组的时间不是一个小数目。有可能因此就TLE。
2012-06-30 16:39:04 345
原创 数组反转(下)
我在数组反转(上)中已经提到了样例程序。现在我们就要实现。首先来说头文件。其实在样例程序中我最初是不打算使用头文件的。但是因为不用头文件,实现函数的时候就必须算好次序,很烦,因此我就使用头文件了。头文件中定义了我们要用的几个函数。#ifndef reversingArray_main_h#define reversingArray_main_hvoid pushToStack(in
2012-06-30 16:36:18 307
原创 数组反转(中)
好了。我们这一次要用栈。栈是先进后出的。如果我们把一些元素(在这里况且设为Q)放入栈,然后不停地出栈,直到栈空了为止。出来的顺序一定是反的。所以呢?可以利用本性质来进行解决。第一步:定义“栈”这种数据类型(我是用C语言实现的,C++中有stack,可以少打几行代码)typedef struct stack{ int data[10]; int top;}REVS
2012-06-30 16:26:34 286
原创 数组反转(上)
有的时候,我们需要对数组反转。为了实现反转,我们可以用两种办法: (1) 交换法:思路:首尾配好,然后每一对每一对进行交换。代码:(从样例程序中截取的)void reverse(){ for (int i = 0;i < 5;++i) { int temp = array[i]; array[i] = arra
2012-06-30 16:21:07 324
原创 "aa\b"不等于“a"
有的时候,输出图省事,我们可能会用“\b"来删除行尾的空格。实际上,是不可以的,比如说我写了一个测试程序:#include #include int main(int argc, const char * argv[]){ char * a = "aaa\b"; char * b = "aa"; printf("%s\n%s\n",a,b); if (
2012-05-30 16:57:42 780
原创 usaco中输出原来要换行
我在这里写一下,不仅提醒自己,而且提醒别人。我一次刷题时,没有ac,但是和标准答案对起来,一模一样。我猜测是忘记换行了。改了一下,在输出的最后换了一个行,就ok了(别的没有改)因此要小心了。
2012-05-30 16:50:15 252
原创 usaco之greedy gift givers
这道题我当年是用java做的,但是我的java代码不知道放在哪里了,只好说一下思路: 用一个数组记录每个人有多少钱,然后用一个hashtable来记录每个人的编号(编号和数组下标对应,用java做的,hashtable 干嘛不用?不过c/pascal的话就麻烦多了,其实用线性查找就ok了) 如果是给0个人,那么钱还是在自己手上,否则收到钱的每个人拥有[总钱数/ 给的人数],余
2012-05-29 17:02:08 383
原创 USACO之Friday the Thirteenth
这道题只要模拟就行了,求出每个月13日是星期几,然后汇总,输出即可(注意输出顺序!)求每个月13日是星期几,可以用递推的方法。首先先记录上个月13日是多少天,再计算从上个月13日到这个月13日有几天,这样这个月13日是星期几就很好求出了,而且速度很快。废话少说,代码上:#include #include #include static int currentDay = -18;
2012-05-29 16:58:48 317
原创 刷题IDE用什么才好
在这里我还是推荐Visual Studio。首先,XCODE 有的时候漏一个头文件也不会出现编译错误(我就吃亏过)。还有,DEV-CPP的调试太垃圾了。很难用。倒是Visual Studio的调试比较方便。
2012-04-29 17:34:16 1982 1
原创 继承
最近看了一下继承。现在我简单分析一下公有继承、私有继承、保护性继承的不同点共有继承:public -> public,protected -> protected私有继承:public -> private,protected -> private保护性继承 public -> protected,protected -> protected
2012-04-29 17:23:54 204
原创 水题不水
有的时侯水题一点也不容易。往往水题里面隐藏着许多陷阱。我最近在刷OJ,被一道水题卡住了。 所以说,看到水题,不要想当然地放松,而是要认真分析。往往难的题目的陷阱少,简单的很多。 比如说Ural 1011,这道题看上去很简单。实际呢?当p = q = 10的时侯,正确答案为10(我看Discuss的)。但是,我就是做了很久都没有做对。 还有,p和q有可能是在
2012-04-29 17:15:37 218
原创 数值计算
思路:找到最低级的运算符,然后分成左右两边进行计算,最后再根据这个运算符进行运算,把两边的结果加(减,乘,除)。代码// calculator.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include#include using namespace std;template class calc{
2012-04-15 20:49:16 234
原创 快速幂
快速幂用了分治的思想。首先,a^b = a^c * a^d(c + d = b),然后可以分成大致相等的两部分进行乘方,然后再合并。时间复杂度为O(n/2) 因为本人比较懒(不想做高精度乘法)就用java实现了。import java.io.*;import java.util.*;import java.math.*;public class fast {
2012-03-25 19:29:13 1010
原创 少包含了一个头文件的后果
我们有的时候会在头文件中包含一些类,但是当我们忘记包含的时候,会出现什么呢?当然是编译不通过。会说在标识符XXX前少了";"(其实加上去是不对),然后再说一堆错误。当我遇到这个错误时,我想了很久也没有想出来,后来才知道原来是少包含了一个头文件。(以下是个人愚见) 程序开始时,有#include语句,然后如果这个类所属的头文件没有被包含的话,也就是说编译器不知道有这个类,当然会报错了。
2012-03-25 11:56:20 720
原创 圆形热点按钮的制作
说明:绘制一个圆形的按钮,如果鼠标悬停在圆里面时,边框变成黑色,否则为白色。过程:思路如下:首先在对话框中绘制一个圆形,然后处理WM_MOUSEMOVE消息,计算出当前鼠标所停的点是否在圆里面。如果在,那么就在绘制时把边框变成黑色的。再处理WM_LBUTTONUP,如果鼠标在圆里面,就弹出一个对话框。首先先定义类circleclass circle : public CWn
2012-03-24 11:39:30 925
原创 为什么能用位运算来交换数据
我们知道,用位运算能交换整型数据。这是实现代码。(注:下面的^都代表是异或而非乘方)int i,j;cin >> i >> j;i = i ^ j;j = j ^ i;i = i ^ j;我们首先要知道三件事:1 . a^b=b^a证明过程很简单。因为0^0=0^0 0^1=1^0 1^0=0^1 1^1=1^1,又因为无论是a^b还是b^a,都是按位异或的,所以a
2012-03-18 18:27:17 443
原创 USACO制Your Ride Is Here
import java.io.*;import java.util.*;import java.math.*;public class ride { public static void main(String[] args)throws Exception{ // TODO Auto-generated method stub String str
2012-02-24 14:32:11 176
原创 逗你玩的运算符重载
1.运算符重载的格式为 operator () 2 不能重载的运算符有: 1.三目元运算符,即?和: 2域运算符:: 3类属关系运算符. 4sizeof运算符 5指针运算符* 使用运算符重载可以进行一些恶作剧,比如说下列代码#include u
2012-02-21 16:16:57 248
原创 C++ Primer Plus第九章学习笔记
1. 作用域 先贴一下我的代码:1. print.h#ifndef PRINT_H_INCLUDED#define PRINT_H_INCLUDEDvoid print();#endif // PRINT_H_INCLUDED2. main.cpp #include #include "print.h"using namespace
2012-02-17 15:21:16 264
原创 用模板做A+B Problem时遇到的小问题
首先先贴上最后编译通过的解: #include using namespace std;template int add(T1 addend1,T2 addend2){ return (addend1 + addend2);}int main(){ int num1,num2; cin >> num1 >> num2;
2012-02-16 10:15:29 227
原创 如果printf中的转换说明数大于后面的参数的数量
写上篇文章的时候,里面有一段源代码。我在IDE里面写的时候,写了一句: printf("%d %d %d %d\n",num1,num2,num3); 想必各位马上就能发现,少了一个参数。 运行结果是:1 3 3 824 为什么呢?因为我少了一个参数,系统就用824代替了。 看来以后要小心,如果发现printf输出了一个看似随机数的东西而在监视中值是正
2012-01-20 10:52:40 352
原创 TCPL第二章学习笔记
第二章我就随便看了一看,觉得没第一章难。第一张的删除注释之类的程序(练习中的)还是有点难度的。 先说说++(某变量)和(某变量)++ 我设这个变量为n,++n是先加后引用,而n++是先引用后加 先看下面代码: #include int main(void){ int num1,num2,num3,base; base
2012-01-20 10:40:04 261
原创 说说我的学习计划
本人虽然可以说会一点C语言,但是看了一下TCPL,才明白自己会的只是一些皮毛。虽然程序能遍,但是比起TCPL中的程序,发现自己写的实在是不行。比如说我记得TCPL中有一句:for (fahr = LOWER; fahr 过去我一般会写int temp = 1;for (temp = LOWER;temp<= UPPER;temp++){ fahr = temp *
2012-01-06 09:53:55 278
原创 The C programming language 学习笔记(一)
1. printf语句printf语句,是用来进行输出的。格式是printf(char* format,...) (因为这是一个可变参数的函数,所以最后是...) 2、转义符第一章里边出现过的有%d,%f,%3.0f,%6.1f之类的。现在我稍微说一下(权当复习)%d 输出10进制整数%f 输出浮点数%3.0f 输出浮点数,不保留小数点后的内容内容,至少占3个字符的位
2012-01-06 09:45:16 440
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人