fjnu 1422 赋值问题

来源:互联网 发布:致知是什么意思 编辑:程序博客网 时间:2024/05/15 15:33
 

Description

在很多程序设计语言中,忘记给变量赋初值的错误常令人头疼。

在下面的问题中,最开始仅有变量a中有确定的值。变量为单个小写字母,

每行恰好有三个字符,中间一个是赋值运算符'='。

请编程求出含N行的程序段运行以后有哪些变量中有确定的值。

Input

第一行:M 表示有M组测试数据,每组测试数据第一行包含N(0<N<=10^6)

以下N行,每行3个字符,为一条语句

Output

如果没有,输出none否则在一行中按字母表顺序给出所有有确定值的变量名。

字母之间用一个空格隔开。

Sample Input

14b=ac=dd=be=f

 

Sample Output

a b d
KEY:注意那个a有可能被其他未赋值的变量给赋值了,那就成了未知变量;开个数组来标志;
 

 

 

Source:#include<iostream>
#include
<algorithm>
using namespace std;

struct node
{
    
char c;
    
int flag;
}
;

class List
{
    node elem[
26];
public:
    List()
    
{
        
int i;
        
for(i=1;i<=26;i++)
        
{
            elem[i].c
='a'+i-1;
            elem[i].flag
=0;
        }

        elem[
1].flag=1;
    }

    
int find(char x);
    
void insert(char A,char B);
    
void output();
}
;

int List::find(char x)
{
    
if(elem[x-96].flag==1return 1;
    
else return 0;
}


void List::insert(char A,char B)
{
    
if(find(A)&&find(B)) return ;
    
if(find(A)&&!find(B))
    
{
        elem[A
-96].flag=0;
        
return ;
    }

    
if(!find(A)&&find(B)) 
    
{
        elem[A
-96].flag=1;
        
return ;
    }

    
if(!find(A)&&!find(B)) return ;
}


void List::output()
{
    
int t=0;
    
int i;
    
for(i=1;i<=26;i++
        
if(elem[i].flag==1) t++;
    
if(t==0)
    
{
        cout
<<"none"<<endl;
        
return ;
    }

    
for(i=1,t=t-1;i<=26&&t;i++,t--)
        
if(elem[i].flag==1) cout<<elem[i].c<<" ";
    
for(;i<=26;i++)
        
if(elem[i].flag==1) cout<<elem[i].c<<endl;
}


int p,q;
int main()
{
//    freopen("fjnu_1422.in","r",stdin);
    int T,N;
    
char A,op,B;
    
    cin
>>T;
    
for(p=1;p<=T;p++)
    
{
        cin
>>N;
        List L;
        
for(q=1;q<=N;q++)
        
{
            cin
>>A>>op>>B;
            L.insert(A,B);
        }

        L.output();
    }

    
return 0;
}

 
原创粉丝点击