这个就是输入一组整数,数组的话没法用,因为数组是定长的,所以我们采用
vector
结合cin.get()
进行判断。
int input;
vector vec;//vector的好处就在是一个动态数组,我们可以在不指定长度的情况下,输入任意长度的数字
while(cin>>input){
vec.push_back(input);
if(cin.get()=='\n')
break;
}
我们在机试中经常遇到单链表的逆序输出的问题,2018北理的机试题中规定必须采用递归、链表输出,所以必须得掌握。
void reverse_input_list(node *q){
if(q->next!=NULL)
reverse_input_list(q->next);
cout<data<<" ";
}
在使用的时候,采用头插或者尾插,建立好链表之后把头结点传入函数中,就OK了。
这也是机试中经常出现的点,虽然不难,但是有时候临时想还是考验逻辑能力的。
cin>>n;
for(i=0;i
这一类题经常是以学生信息、成绩等为背景进行考察,这个是一个关于学生成绩输入,统计挂科两门以上的学生、输出信息,并按照每个人的挂科数目进行排序输出,这个难点在成绩的不确定。我是在结构体中定义了一个
vector< float> score.
typedef struct Student{
string name;
int no;//学号
vector score;
}student;
下面是具体的输入信息:
while(cin>>scor){
if(scor == -1)
break;
s[cnt].score.push_back(scor);//cnt是结构体数组,表示第几个学生。
}
我们经常遇到需要把一个字符串中的数字输出出来,可以是整数、小数、正负数(前面有正负号需要带着正负号)。首先是输入之后,我们需要进行判断。
cin>>s;
int i;
for(i=0;i='0'&&s[i]<='9' || s[i]=='+'||s[i]=='-'){
i=judge(i);//此处是第一次输入i,经过完整的判断在
//输出完这个数字之后,下一个不符合判断条件的字符的开始
//此处的i的精髓,judge()函数返回的是第一个不符合输出条件的字符的下标,我们用i接受这个
//下标,对现在的i++再次开始判断是否符合进入判断的条件,精髓认真理解。
}
}
接下来就是进行小数、负数、正数、纯数字的输出了,其中还包括类似于+004.500这种数字输出为+4.5。
int judge(int i){//这个i是元素的下标。
int flag=1;//负数输出时,将flag赋值-1,乘上输出的数。
bool a=false;
double point=1,num=0;//表示点,在查找的过程中,可以将.后面的数字呈上point。
do{//在循环中会一直判断下一个字符是不是符合要求,.或者数字来操作。
if(s[i]>='0'&&s[i]<='9'){//纯数字或者小数的精髓,通过设置point的值来使其不断*0.1,使得2.3333这种也可以输出。
if(point>=1){
num=num*10+s[i]-'0';
}
else{
num=num+point*(s[i]-'0');
point*=0.1;//考虑存在2.333这种情况。
}
}
else if(s[i]=='-')
flag *= -1;
else if(s[i]=='+')
a=true;
else if(s[i]=='.')
point*=0.1;
}while(!endof(s[++i])&&i
这个题是关于全排列的,意思是给a,b,c三个字符,输入n,加入n=2,那就输出aa,ab,ac,bb,ba,bc,cc,cb,ca,9最后再输出一共有几个,这个题我的思路是,一个string,一个vector< char> v;
if(n==1){
show(v);
return 0;
}
else{
while(--n){
v=fun(v,a);//此处必须带参数做,例:n=3,其运行情况是先n=2,此时循环结束之后,v中的字符为aa,ab,ac.....,之后再n--,n=1。
//结果保存了之后返回给v,然后v再作为参数传回给fun,
//此时的v是aa,ab,ac.....,然后继续拼接单个字符,以此类推n=4,n=5...
}
show(v);
}
下面是fun函数,是用了一个返回vector的函数,因为每次这个返回的vector都要作为下一次循环的参数进行继续判断。
vector fun(vector v,string a){
int i,j;
vector ve;
for(i=0;i
就是在判断回文数、水仙花数的时候,我们需要知道输入数字的每一位,然后进行判断。
num=n;
len=0;
while(num){
arr[len++]=num%10;//取余之后的结果存放在arr中,是从低位到高位的存放
num/=10;//每次取余结束之后,/10,因为int是向下取整,所以123除10就是12.
}
int gcd(int a,int b){
int t;
if(a
#include
#include
#include
int main(){
char fname[20]="abc.txt";
ofstream out(abc.txt);
if(out.is_open()){
out<<"Hello,file!"<