9512.net

# 讲评--表2

1002:特殊的数字
Problem Description

Input

Output Time Limited Eceeded(考虑数组越界)

Sample Input
11 12 21 22

Sample Output
10 10 19 20

#include<iostream> using namespace std; int main() { int n,num,i,t,a[10],j,k,l,flag; while(cin>>n) { num=0;

for(i=1;i<n;i++) { t=i; flag=0; memset(a,0,sizeof(a)); while(t) //判断每个 t 是否为“特殊的数字” { j=t%10; if(a[j]==0) a[j]=1; else { } if(flag==0) num++; } cout<<num<<endl; } return 0; } flag=1;break; } t=t/10;

1008:单链表中删除重复值
Problem Description

Input

Output

Sample Input
5 1 3 7 3 9 5 1 3 5 7 9

Sample Output
1 3 7 9 1 3 5 7 9

#include<iostream> using namespace std; struct Node { int data; Node *next; }; class LinkList { public: LinkList(int a[ ], int n); void PrintList( ); void Delete();

void Sort(); private: Node *first; int len; }; LinkList::LinkList(int a[ ], int n) { first=new Node; Node *r,*s; r=first; for (int i=0; i<n; i++) { s=new Node; s->data=a[i]; r->next=s; r=s; } r->next=NULL; len=n; } void LinkList::PrintList( ) { Node *p; p=first->next; if(p) { cout<<p->data; p=p->next; while (p) { cout<<" "<<p->data; p=p->next; } cout<<endl; } } void LinkList::Delete() {

Node *p,*q; if(first->next) { p=first->next; q=p->next; while(q) { Node *t=first->next; while(t!=q) { if(t->data==q->data) break; else t=t->next; } if(t!=q)//有重复 { p->next=q->next; delete q; q=p->next; len--; } else { p=q; q=p->next; } } } } void LinkList::Sort() { int i,j,t; Node *p,*q; for(i=0;i<len-1;i++) {

p=first->next; q=p->next; for(j=0;j<len-i-1;j++) { if(p->data>q->data) { t=p->data; p->data=q->data; q->data=t; } p=q; q=p->next; } } } int main() { int a[100],i,n; while(cin>>n) { for(i=0;i<n;i++) cin>>a[i]; LinkList L(a,n); L.Delete(); L.Sort(); L.PrintList(); } return 0; }

1003:求相同后缀首字符
Problem Description

Input

Output

Sample Input

Sample Output
i a

#include<iostream> #include<string> using namespace std; const int MAXSIZE=1600; struct Node { char data; Node *next; }; Node *creat(char a[ ], int n) { Node *first; Node *r,*s; first=new Node; //生成头结点 r=first; //尾指针初始化 for (int i=0; i<n; i++) { s=new Node; s->data=a[i]; //为每个数组元素建立一个结点 r->next=s; r=s; //插入到终端结点之后

} r->next=NULL; return first; }

//单链表建立完毕，将终端结点的指针域置空

void Search(Node *LA,int n,Node *LB,int m) { int i,j; Node *p,*q; p=LA->next;q=LB->next; i=0;j=n-m; while(p&&i<j) { p=p->next; i++; } while(p&&q) { if(p->data==q->data) break; else { p=p->next; q=q->next; } } if(p) cout<<p->data<<endl; } int main() { char a[MAXSIZE],b[MAXSIZE]; int n,m; Node *LA,*LB; while(cin>>a>>b) { n=strlen(a); m=strlen(b); if(n>=m) { LA=creat(a,n); LB=creat(b,m); Search(LA,n,LB,m); } else

{ LA=creat(b,m); LB=creat(a,n); Search(LA,m,LB,n); } } return 0; }

1003:单链表连续删除
Problem Description

Input9

Output

Sample Input
5 1 2 3 4 5 2 3

Sample Output
1 5

#include<iostream> using namespace std; struct Node { int data; Node *next; }; class LinkList { public: LinkList(int a[ ], int n); void PrintList( ); void Delete(int i,int len); private: Node *first;

}; LinkList::LinkList(int a[ ], int n) { first=new Node; Node *r,*s; r=first; for (int i=0; i<n; i++) { s=new Node; s->data=a[i]; r->next=s; r=s; } r->next=NULL; } void LinkList::PrintList( ) { Node *p; p=first->next; if(p) { cout<<p->data; p=p->next; while (p) { cout<<" "<<p->data; p=p->next; } cout<<endl; } } void LinkList::Delete(int i,int len) { int j; Node *p,*q,*t,*r; if(len>0) { p=first; j=0; while(j<i-1) { p=p->next; j++; } q=p; j=0; while(j<len)

{ q=q->next; j++; } t=p->next; p->next=q->next; while(t!=q) { r=t->next; delete t; t=r; } delete q; } } int main() { int a[100],i,n,len; while(cin>>n) { for(i=0;i<n;i++) cin>>a[i]; cin>>i>>len; if(len<0||i<1||i>n||i+len-1>n) cout<<"data error"<<endl; else { LinkList L(a,n); L.Delete(i,len); L.PrintList(); } } return 0; }

1003:Min 值
Problem Description

Input

Output

Sample Input
8 4 2 6 -3 1 9 14 5

Sample Output
-3 4 2 6 1 9 14 5

#include<iostream> using namespace std; struct Node { int data; Node *next; }; class LinkList { public: LinkList(int a[ ], int n); void PrintList( ); void Delete(); private: Node *first; }; LinkList::LinkList(int a[ ], int n) {

first=new Node; Node *r,*s; r=first; for (int i=0; i<n; i++) { s=new Node; s->data=a[i]; r->next=s; r=s; } r->next=NULL; } void LinkList::PrintList( ) { Node *p; p=first->next; if(p) { cout<<p->data; p=p->next; while (p) { cout<<" "<<p->data; p=p->next; } cout<<endl; } } void LinkList::Delete() { Node *q,*p,*t,*r; int min; p=first;t=p; q=first->next; min=q->data; while(q) { if(q->data<min) { min=q->data; t=p; } p=p->next; q=q->next; } if(t!=first) { r=t->next;

t->next=r->next; r->next=first->next; first->next=r; } } int main() { int a[100],i,n; while(cin>>n) { for(i=0;i<n;i++) cin>>a[i]; LinkList L(a,n); L.Delete(); L.PrintList(); } return 0; }

1002:跳水比赛
Problem Description

Input

Output

Sample Input
5 2 2 2 3 3 5 4 6 1 2

Sample Output
5,4,3,1,2

#include<iostream> #include<string> using namespace std; const int MaxSize = 50; struct score { int num; int x; int y; }; int main() { int n,i,j,s,t; score a[MaxSize];

score temp; while(cin>>n) { for(i=0;i<n;i++) a[i].num=i+1; for(i=0;i<n;i++) cin>>a[i].x; for(i=0;i<n;i++) cin>>a[i].y; for(i=0;i<n-1;i++) for(j=0;j<n-i-1;j++) if(a[j].x<a[j+1].x) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } else if(a[j].x==a[j+1].x) { if(a[j].y<a[j+1].y) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } cout<<a[0].num; for(i=1;i<n;i++) cout<<','<<a[i].num; cout<<endl; } return 0; }

1001:判操作序列有效性
Problem Description

Input

Output

Sample Input
IOIIOIOO IOOIOIIO

Sample Output
1 0

#include <iostream> using namespace std; const int MAXSIZE=50; int Judge(char s[]) { int i=0,top=-1; while(s[i]!='\0') { if(s[i]=='I') top++; else { if(top==-1) return 0; else top--; } i++; } if(top==-1) return 1;

else return 0; } int main() { char a[MAXSIZE]; while(cin>>a) cout<<Judge(a)<<endl; return 0; }

1004:循环队列的操作
Problem Description

Input

Output

Sample Input
10 4 9 10 2 7 16 8 12 4 3 1 10 3 9 10 2 7 16 8 12 1 3 4

Sample Output
1:10 2 16 8 1:10 2 16 2:8 12 4

#include <iostream> using namespace std; const int MAXSIZE=100; void operate(int a[],int n,int m) { int front,rear,i,q[MAXSIZE],count; count=0; front=rear=m; for(i=0;i<n;i++) if(a[i]%2==0) { rear=(rear+1)%(m+1); q[rear]=a[i]; if((rear+1)%(m+1)==front)

{ cout<<++count<<':'; while(front!=rear) { front=(front+1)%(m+1); cout<<q[front]<<' '; } cout<<endl; } } } int main() { int a[MAXSIZE],i,n,m; while(cin>>n>>m) { for(i=0;i<n;i++) cin>>a[i]; operate(a,n,m); } return 0; }

1001:约瑟夫环问题
Problem Description

Input

Output

Sample Input
6 3 7 3

Sample Output
3 6 4 2 5 1 3 6 2 7 5 1 4

#include<iostream> using namespace std; struct Node { int data; Node *next; }; class CLinkList { public: CLinkList(int n); ~CLinkList(){} private: //建立有 n 个元素的单循环链表 //析构函数，在出圈过程中已删除，因此可为空 //实现 n 个人密码为 m 的约瑟夫环问题

void ysf(int n,int m);

Node *first,*rear; };

//单循环链表的头指针

CLinkList::CLinkList(int n) { first=new Node; first->data=1; Node *r,*s; r=first; { s=new Node; s->data=i; r->next=s; r=s; } r->next=first; rear=r; } void CLinkList::ysf(int n,int m) { //n 表示圈内初始人数，m 表示密码，num 表示圈内当前人数，i 表示当前报的数 Node *p,*q; int num,i; num=n; i=1; q=rear; p=first; while(num>1) { if(i==m) { q->next=p->next; cout<<p->data<<" "; delete p; p=q->next; i=1; //报到密码，出圈 //也可 while(p->next!=p) //单循环链表建立完毕，将终端结点的指针域置为头指针 //为每个数组元素建立一个结点 //插入到终端结点之后 //尾指针初始化 for (int i=2; i<=n; i++)

num--; } else { q=p; p=p->next; i++; } } cout<<p->data<<endl; delete p; } int main() { int n,m; while(cin>>n>>m) { CLinkList L(n); L.ysf(n,m); } return 0; } //没有报到密码，继续

1010:火车车厢重排
Problem Description

Input

Output

Sample Input
9 3 9 3 3 6 9 2 4 7 1 8 5 3 6 9 2 4 7 5 8 1

Sample Output
1 0

#include<iostream> using namespace std; const int N=10+2; const int K=5+1; int Judge(int s[],int n,int k) { int a[K][N],i,j,nowout; int front,rear,t,max,res=1,flag; for(i=0;i<K;i++) { for(j=0;j<N;j++) a[i][j]=0; }

i=1;nowout=1; while(i<=n) { flag=0; if(s[i]==nowout) //当前入轨为 nowout { nowout++; flag=1; i++; } else //非空缓冲轨的队头元素为 nowout { for(j=1;j<k;j++) { front=a[j][0]; rear=a[j][N-1]; if(front!=rear&&a[j][front+1]==nowout) { nowout++; a[j][0]++; flag=1; break; } } } if(flag==0) //当前入轨和各缓冲轨队头均非 nowout { t=0;max=-1; for(j=1;j<k;j++) //找出 max(小于当前入轨的队尾)值及所在非空缓冲轨 t { front=a[j][0]; rear=a[j][N-1]; if(front!=rear&&a[j][rear]<s[i]&&a[j][rear]>max) { t=j; max=a[j][rear]; } } if(t>0) //若 t 存在，则当前入轨存入 t { rear=++a[t][N-1]; a[t][rear]=s[i]; i++; } else //t 不存在，查看是否有空缓冲轨 {

for(j=1;j<k;j++) //存在多于 1 个的空缓冲轨，则当前入轨存入 { if(a[j][0]==a[j][N-1]) { rear=++a[j][N-1]; a[j][rear]=s[i]; i++; break; } } if(j==k) //车厢无法重排，算法结束 { res=0; break; } } } } return res; } int main() { int s[N]; int i,n,k; while(cin>>n>>k) { for(i=1;i<=n;i++) cin>>s[i]; cout<<Judge(s,n,k)<<endl; } return 0; }

4.3.4-2班组周安全讲评记录_图文
4.3.4-2班组周安全讲评记录_建筑/土木_工程科技_专业资料。班组周安全讲评记录 表4.3.4 班组名称:瓦工 讲评人 班组(周)安全活动记录 日期: 记录人 参加人员 ...

2012-2013 学年度第学期 习作及讲评教案 碾盘小学六年级 教师:张朋辉 习作一...板书:大胆地说心里话,说真话、表真情 4、现在请同学们认真想一想,先回忆、...
...最新审定青岛版数学年级上册第四单元测试及讲评(...