FZU 1055 赋值问题

 

赋值问题
Time Limit:1s Memory limit:32M
Accepted Submit:617 Total Submit:3787

在很多程序设计语言中,忘记给变量赋初值的错误常令人头疼。请编程求出含N(0≤N≤100)行的程序段运行以后有哪些变量中有确定的值。在下面的问题中,最开始仅有变量a中有确定的值。变量为单个小写字母,每行恰好有三个字符,中间一个是赋值运算符'='。

输入

输入有多组数据,每组数据的第一行有一个整数N,表示程序段的行数。以下N行,每行3个字符,为一条语句。最后一组数据N=-1表示输入结束,不需要处理。

输出

对每一组数据输出一行结果,按字母表顺序给出所有有确定值的变量名。如果没有变量有确定的值,输出none。

输入样例

4
b=a
c=d
d=b
e=f
-1

输出样例

a b d

Original: FZUPC Warmup 2005

 

解题:

       失败之作,折磨了好久才做出来。测试数据考虑不全呀~~~惹的代码一片乱。糟糕。

       关键点:把有确定值的变量放入数组中,记住a本来就在数组里面。若数组里面的值又被赋予了未知量,则从数组中剔除。还有可以被赋值数字。

#include <iostream> #include <string.h> using namespace std; void sort(char a[],int n) { int i,j; char k; for(i=1;i<n;i++) { k=a[i]; j=i-1; while(j>=0 && a[j]>k) { a[j+1]=a[j]; j--; } a[j+1]=k; } } int main() { int n,k,flag=1;int flag2=0;int flag3=0; char a,b; char c[250]; memset(c,'/0',250); while(cin>>n && n!=-1) { if(n==0) { cout<<"a"<<endl; continue; } cin.get(a); for(int i=0;i<n;i++) { a=cin.get(); cin.get(b); b=cin.get(); if((b=='a' || a=='a') && flag==1) { for(k=0;k<250;k++) if(c[k]=='/0') { c[k]='a'; flag=0; flag2++; break; } } if(b>='0' && b<='9' ) { for(k=0;k<250;k++) if(c[k]=='/0' && a!='a') { c[k]=a; flag2++; break; } } else { for(int j=0;j<250;j++) { if(b==c[j]) { flag3=1; for(k=0;k<250;k++) { if(a==c[k]) { break; } else if(c[k]=='/0') { c[k]=a; flag2++; break; } } break; } } if(flag3==0) { for(k=0;k<250;k++) { if(a==c[k]) { for(int w=k;w<250;w++) c[w]=c[w+1]; flag2--; } } } } flag3=0; cin.get(b); if(flag==1) { c[flag2++]='a'; flag=0; } } if(flag2==0) cout<<"none"<<endl; else { sort(c,flag2); for(int p=0;p<flag2 && c[p]!='/0';p++) { if(p==0) cout<<c[p]; else cout<<" "<<c[p]; } cout<<endl;} flag=1;flag2=0; memset(c,'/0',250); } return 0; }

你可能感兴趣的:(编程,c,测试,ini,语言)