有一所很不起眼的学校,它叫云帆实验学校

2010年5月8日 Yarkee 4 条评论

云帆实验学校是长沙市宁乡县教育局于2003年创办的一所复读学校。对,这只是一所没什么地位的复读学校。

2004年,云帆713名学生参加高考,本科一、二批上线365人,其中重本152人;

2005年,云帆1317名学生参加高考,本科一、二批上线691人;

2006年,本科一、二批上线949人;

2007年,本科一、二批上线1179人;

2008年, 云帆2389名学生参加高考,本科一、二批上线1554人,其中重本上线689人;

2009 年,云帆2568人参考,本科一、二批上线1696人,其中重本上线765人。其中彭巍、刘婷、谢毅荣获宁乡文科状元(600分),刘宏达荣获宁乡理科状 元(645分)。文科6人进入全县10名,37人进入全县50名。理科4人进入全县10名,17人进入全县50名。

阅读全文…

分类: 生活 标签:

C++输入函数再贴一篇

2010年4月12日 Yarkee 2 条评论

当然,还是先要声明,这篇是转载的。

1、cin>>          

用法1:最基本,也是最常用的用法,输入一个数字:

#include <iostream>
using namespace std;
main ()
{
int a,b;
cin>>a>>b;
cout<<a+b<<endl;
}

输入:2[回车]3[回车]
输出:5

用法2:接受一个字符串,遇“空格”、“TAB”、“回车”都结束

#include <iostream>
using namespace std;
main ()
{
char a[20];
cin>>a;
cout<<a<<endl;
}

输入:jkljkljkl
输出:jkljkljkl

输入:jkljkl jkljkl       //遇空格结束
输出:jkljkl

阅读全文…

分类: 编程 标签:

二维vector容器模拟迷宫,用回溯法走出迷宫

2010年4月9日 Yarkee 2 条评论

依然是老师布置的作业。题目为:

Write a backtracking program to find a way through a rectangle maze.
即用回溯法找出一条走出矩形迷宫的路径。
程序写得很粗糙,相当粗糙。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include<iostream>
#include<vector>
#include"time.h"
using namespace std;
 
int flag=1;//由于迷宫可能有多个解,flag的作用就是用来控制,使输出的解只有一个
 
/*模拟的迷宫是有h*l个点的矩形,若矩形的某位置可以通行,则用'-'表示,某位置有障碍
,不可通行,用'*'表示,已走过的点用'0'表示
*/
 
void find_way(vector<vector<char>> &maze,int maze_i,int maze_j)//回溯法
{
        maze[maze_i][maze_j]='0';
        //若已达到出口,则输出已经被解出来的迷宫,及线路图
        if(maze_i==(maze.size()-1)&&maze_j==(maze[0].size()-1)){
            flag=0;
            cout<<"One solution of this maze is as follow: "<<endl;
            for(vector<vector<char>>::size_type i=0;i<maze.size();i++){
                for(vector<char>::size_type j=0;j<maze[0].size();j++){
                    cout<<maze[i][j]<<" ";
                }
                cout<<endl;
            }
            cout<<endl;
        }else{
        //如果下一个位置可以前进,则前进一步,然后递归调用fing_way函数
            if(maze_i>0&&maze[maze_i-1][maze_j]=='-'&&flag==1){
                find_way(maze,maze_i-1,maze_j);
            }
            if(maze_i<maze.size()-1&&maze[maze_i+1][maze_j]=='-'&&flag==1){
                find_way(maze,maze_i+1,maze_j);
            }
            if(maze_j>0&&maze[maze_i][maze_j-1]=='-'&&flag==1){
                find_way(maze,maze_i,maze_j-1);
            }
            if(maze_j<maze[0].size()-1&&maze[maze_i][maze_j+1]=='-'&&flag==1){
                find_way(maze,maze_i,maze_j+1);
            }
        }
        maze[maze_i][maze_j]='-';
}
 
int main()
{
    vector<vector<char>> maze;
    vector<char> temp;
    int h,l,t=1;
    srand((int)time(NULL));
    while(t!=0){
        cout<<"Input the height of the maze: ";
        cin>>h;
        cout<<"Input the length of the maze: ";
        cin>>l;
        //用二维的vector容器模拟一个迷宫,'-'表示可通行,'#'表示有障碍
        for(int i=0;i<h;i++){
            for(int j=0;j<l;j++){
                if((i==0&&j==0)||(i==h-1&&j==l-1)) temp.push_back('-');//保证入口和出口是可通行的
                else if(rand()%3){
                    temp.push_back('-');
                }
                else {
                    temp.push_back('#');
                }
            }
            maze.push_back(temp);
            temp.clear();
        }
        cout<<"The maze is as follow:"<<endl;
        for(int i=0;i<h;i++){
            for(int j=0;j<l;j++){
                cout<<maze[i][j]<<" ";
            }
            cout<<endl;
        }
        /*迷宫默认的入口位置为左上角,出口位置为右下角
          可以通过修改find_way的第二个和第三个参数,来修改入口位置
          通过修改find_way的第一个if语句来修改出口位置
        */
        cout<<endl;
        find_way(maze,0,0);
        //此时flag还等于0,证明迷宫无解
        if(flag==1) cout<<"Oh my god! No solution in this terrible maze!"<<endl<<endl;
        cout<<"Input 0 to quit this program,else to continue simulating."<<endl;
        //模拟完一次后,把二维的vector容器清空,flag置1,为下一次模拟做准备
        maze.clear();
        flag=1;
        cin>>t;
    }
    return 0;
}
分类: 编程 标签: , ,

转载:cin深入分析(下) – cin的错误处理

2010年3月27日 Yarkee 没有评论

在前一节中我们有几个例子中提到了cin函数出错,以致不再执行读操作(程序8)。而且我们经常会看到程序中会出现cin.clear(),cin.ignore(), cin.fail()等函数。这些函数都是与cin的错误处理有关的。这一节我们来分析一下cin的错误处理机制,并且学习几个重要的函数:cin.fail(), cin.bad(), cin.good(), cin.clear(),  cin.ignore()等。

程序执行时有一个标志变量来标志输入的异常状态,其中有三位标志位分别用来标志三种异常信息,他们分别是:failbit,eofbit,badbit。这三个标志位在标志变量中是这样分配的:
____________________________________
|     2     |     1    |     0     |
|  failbit  |  eofbit  |   badbit  |
|___________|__________|___________|
看一下这几个标志位的作用(引用msdn):
badbit, to record a loss of integrity of the stream buffer.
eofbit, to record end-of-file while extracting from a stream.
failbit, to record a failure to extract a valid field from a stream.
In addition, a useful value is goodbit, where no bits are set.

接下来我么看几个ios类的数据定义(引用msdn):
typedef T2 iostate;
static const iostate badbit, eofbit, failbit, goodbit;

这里ios类定义了这四个常量badbit, eofbit, failbit, goodbit,其实这四个标志常量就是取对应标志位的掩码,也即输入的四种异常情况!
以上四个常量对应的取值为:
ios::badbit    001   输入(输出)流出现致命错误,不可挽回 
ios::eofbit    010   已经到达文件尾
ios::failbit   100   输入(输出)流出现非致命错误,可挽回
ios::goodbit   000   流状态完全正常, 各异常标志位都为0

我们可以用输出语句来验证这几个常量的值:
cout << ios:: failbit << endl;
cout << ios:: eofbit << endl;
cout << ios:: badbit << endl;
cout << ios:: goodbit << endl;
输出的结果为:
4
2
1
0
【注意】它们不是failbit、badbit、eofbit、goodbit这四个标记位的存贮变量,而是四个标志四种异常状态的常量,其实他们就相当于取对应状态标志位的掩码。如果标志变量为flag,则flag & failbit 就取得fail标志位。

阅读全文…

分类: 编程 标签:

转载:cin深入分析(上) – cin输入操作处理

2010年3月27日 Yarkee 没有评论

问题描述

很多初学者都认为cin函数是一个很简单的函数,其实不然!cin函数有很多需要了解的知识(比如:cin的返回值是什么,cin提供了哪些成员函数且分别是什么作用,如cin.clear(), cin.ignore(), cin.fail(), cin.good()等等),如果没有很好的掌握,在使用的时候很可能会出问题却不知其原因!而且很多人也确确实实遇到过不少问题,以下是几个简单的例子:

程序1

#include <iostream>

using namespace std;

int main()

{

int m, n;

cin>>m;

cin>>n;

return 0;

}

测试情况:

如果用户每次都输入两个合法的数,程序不会出问题!

但是如果用户第一次输入时给一个非法的输入,比如说输入一个字符’a',你会发现程序不

会再执行第二条输入语句。似乎有点奇怪!!

程序2

#include <iostream>

using namespace std;

int main()

{

char str[8];

cin.getline(str, 5);

cout<<str<<endl;

cin.getline(str, 5);

cout<<str<<endl;

return 0;

}

程序的功能很简单,就是输入一个字符串再输出,再次输入一个字符串输出。程序执行情况:

测试一:

abcd (回车)

abcd (输出)

efgh (回车)

efgh (输出)

当用户第一次输入的字符串字符数小于4时,程序执行正常!

测试二:

abcdefgh (回车)

abcd (输出)

(输出-换行)

当用户第一次输入的字符数字符数大于4时,第一个字符串接受输入的前四个字符,而第二次的输入操作没有执行,第二个字符串输出为空。似乎也很奇怪!!!

其实在很多时候都会遇到诸如此类的问题,如果不熟悉程序输入的原理和cin等一些函数的原理就不知道怎么解决!我在这里做一个简单的介绍,也许介绍得不是很准确和全面,或者存在一些误解,请大家包涵!

阅读全文…

分类: 编程 标签: ,

WP SlimStat