問題 ID タイトル コンピュータ
1846 A 10 進数と 8 進数の変換 (スタックとキュー)
1847 B |式の評価 (スタックとキュー) //PRN
1848 C 同じシーケンス (スタックとキュー)
1849 D 回文 (スタックとキュー)
1850 E |異なるポッピング状況 (スタックとキュー)
1851 F ナップザック問題 (スタックとキュー)問題 ID タイトル クラス後
1852 A |キューの組み合わせ (スタックとキュー) // バックトラッキング
1853 B 最小公倍数 (スタックとキュー)
1854 C 逆スタック (スタックとキュー)
1855 D スタックの基本操作 (スタックとキュー)
1856 Eシーク 部分配列 (スタックとキュー) の最大合計
2355 F | スパース行列の乗算//教科書のコード
マシン上の W8
1846問題 10 進数から 8 進数への変換 (スタックとキュー)
#include <stdio.h>
#include <stdlib.h>
//1846 Problem A 十进制与八进制的转换(栈和队列)
int main(){
int t; scanf("%d",&t); printf("%o",t);}
1847問題 B 式の評価 (スタックとキュー)リンク
//REF 年轻过成了秃顶
#include"stdio.h"
#include"string.h"
#define MAX_lenght 10000
typedef struct {double data[MAX_lenght]; int top;} SqStack;//数字的存入。
typedef struct {char data[MAX_lenght]; int top;} SqStackchar;//符号的存入
SqStack S;
SqStackchar Symbol;
void PUSHchar(char t){
{
Symbol.data[Symbol.top]=t;
Symbol.top++;}}
void POPchar(char *t){
{
*t=Symbol.data[Symbol.top-1];
Symbol.top--;}}
void PUSH(double e){
{
S.data[S.top]=e;
S.top++;}}
void POP(double *e){
{
*e=S.data[S.top-1];
S.top--;}}
void change(char e){
static double a,b,c; static char t;
//如果是 + -
if((e=='+'||e=='-') && Symbol.top>0) {t=1;
while(Symbol.top>0 && t!='('&&t!='['){
POPchar(&t);
if((t=='('||t=='[')) break;
POP(&a); POP(&b);
switch(t){
case '+': PUSH(a+b);break;
case '-': PUSH(b-a);break;
case 'x': PUSH(a*b);break;
case '/': PUSH(b/a);break;}
}
if(t=='('||t=='[') PUSHchar(t);
PUSHchar(e);}
else //如果是 * /
if((e=='x'||e=='/') && Symbol.top>0) {t=1;
while(Symbol.top>0&&t!='('&&t!='['&&t!='+'&&t!='-'){
POPchar(&t);
if(t=='('||t=='['||t=='+'||t=='-') break;
POP(&a); POP(&b);
switch(t) {