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...