2023年北理複試上機題

2021-09-11 04:56:30 字數 3373 閱讀 7016

1、輸入一串整數,輸入指令。

要求:(1)輸入a t,在這串整數後新增整數t。(2)輸入c\m\n,用n替換m。(3)輸入d t,刪除t。(4)輸入s排序。

#include #include #include #include #include using namespace std;

print(vectorvi)

coutstring str;

int end=0,i,num;

char order;

cout<< "請輸入一串數字,以#結尾"<>str;

i=0;

num=0;

while(str[i]!='\0' && str[i]!='#')

if(str[i]=='#' && i==0) //結束,且這個不作數

break;

else

}int n1,n2;

while(1)

else if(order=='c')

else if(order=='d')

print(vi);

} else if(order=='s')

else

出錯的原因主要是vector在erase乙個元素的時候會自動返回下乙個元素的迭代器,當我們刪除最後乙個元素後,it==vi.end(),

又因為for結束後有個it++,所以導致出錯。

#include #include #include #include using namespace std;

vectorvi;

void inputerro(char &c)

}void change(int num1,int num2)

}void print()

printf("\n");

}void delete(int num)

}int main()

else

while(c!='\n')

c=getchar();

break;

}case 'c':

}while(c!='\n')

c=getchar();

break;

}case 'd':

while(c!='\n')

c=getchar();

break;

}case 's':

case '#':return 0;

default:

}}}

2、輸入表示式,輸出值。分兩種情況:中綴表示式和字尾表示式。

中綴表示式求值:先將中綴表示式建立二叉樹轉字尾表示式,然後再求值。

#include #include #include #include using namespace std;

stacks_number;

stacks_ch;

int prio_before(char c)

; int pri[6]=;

for(int i=0;i<6;i++)

return -1;

}int prio_after(char c)

; int pri[6]=;

for(int i=0;i<6;i++)

return -1;

}bool isfuhao(char c)

void getpop(char c)

else

printf("非法出\n");

} else

printf("非法出\n");

if(c=='+')

value=num1+num2;

if(c=='-')

value =num1-num2;

if(c=='*')

value=num1*num2;

if(c=='/')

value =num1/num2;

s_number.push(value); }

int main()

if(s_ch.top()=='(')

s_ch.pop();

}else

s_ch.push(str[i]);}}

} else

char ch[100];

string s=str.substr(begin,i-begin);

float num;

sscanf(s.c_str(),"%f",&num);

s_number.push(num);

i--;

} }while(s_ch.size()>0) //注意符號還未全部配對

if(s_number.size()>0)

printf("%g\n",s_number.top());

return 0;

}

#include #include #include #include using namespace std;

stacks_ch;

stacks_fl;

float result=0;

int getprioout(char c) //站外

; int p[6]=;

for(int i=0;i<6;i++) }

int getprioin(char c) //站內

; int p[6]=;

for(int i=0;i<6;i++) }

bool isfuhao(char c)

float popfuhao(char c)

else

printf("非法\n");

if(!s_fl.empty())

else

printf("非法\n");

if(c=='+')

value=num1+num2;

if(c=='-')

value=num1-num2;

if(c=='*')

value=num1*num2;

if(c=='/')

value=num1/num2;

s_fl.push(value);

return value ;

}int main()

s_ch.push(str[i]);}}

} else

string num=str.substr(begin,i-begin);

float f_num;

sscanf(num.c_str(),"%f",&f_num);

s_fl.push(f_num);

i--;

} }while(!s_ch.empty()) //!!

printf("%g\n",result);

}

2023年北理複試上機題

這題遇到了很多問題,首先是sscanf 在使用這個時,無論是前面的字串還是後面用來接受的變數,注意都是字元陣列,不要用string,但可以接收後,直接賦值給string。char 型別給string 直接賦值,反之不可,用for i 0 i當結構體型別是 迭代器 it,訪問它內容的時候就不要 直接i...

2023年北理複試上機題

1 某人有 8 角的郵票 5 張,1 元的郵票 4 張,1元 8 角的郵票 6 張,用這些郵票中的一張或若干張可以得到多少種不同的郵資?題目要求是得到不同的郵資,也就是最後的總價值是不同的。這裡我們可以考慮完所有的情況,然後去掉重複的就可以了。include includeusing namespa...

2023年北理複試上機題

1 乙個小球,從高為h的地方下落,下落彈地之後彈起高度為下落時的一半,比如第一次彈起高度為h 2,如此反覆,計算從小球h高度下落到n次彈地往返的總路程。要求 1 用遞迴的方法實現。2 輸入h和n,輸出結果。3 注意程式的健壯性。4 可以用c c 實現。include include using na...