在很多程序设计语言中,忘记给变量赋初值的错误常令人头疼。请编程求出含N(0≤N≤100)行的程序段运行以后有哪些变量中有确定的值。 在下面的问题中,最开始仅有变量a中有确定的值。变量为单个小写字母,每行恰好有三个字符,中间一个是赋值运算符'='。
#include<stdio.h> #include<string.h> int main() { int n,i,vis[26]; char a,b,c;; while(scanf("%d",&n)) { if(n==-1) break; memset(vis,0,sizeof(vis)); vis[0]=1; for(i=0;i<n;i++) { getchar(); scanf("%c%c%c",&a,&b,&c); vis[a-'a']=vis[c-'a']; } int flag=1;int sum=0; for(i=0;i<26;i++) { if(vis[i]) { sum++; if(sum==1) printf("%c",i+'a'); else printf(" %c",i+'a'); flag=0; } } if(flag==1) printf("none"); printf("\n"); } }
Description
Input
Output
Sample Input
2 10 1 1 1 2 2 2 3 3 4 4 20 0 1 0 1 2 3 4 2 3 4 65535 65535 65535 789456123 789456123 789456123 10 10 10 10
Sample Output
1 2 65535 789456123
#include<stdio.h> #include<algorithm> using namespace std; __int64 a[1000002]; int main() { __int64 m,n,i,j,s,k,t; scanf("%I64d",&t); while(t--) { scanf("%I64d",&n); s=0; for(i=0;i<n;i++) { scanf("%I64d",&a[i]); s^=a[i]; } m=s,k=s,j=0; while(m) { j++; if(m%2==1) break; m/=2; } j--; for(i=0;i<n;i++) if(a[i]>>j&1) s^=a[i]; k^=s; printf("%I64d %I64d\n",min(k,s),max(k,s)); } return 0; }
#include <cstdio> #include <cstring> int map[55][55][55]; bool low[55][55][55]; int l,w,h,m,count; int ac(int x,int y,int z) { if(x>=0 && x<l && y>=0 && y<w && z>=0 && z<h && low[x][y][z]) return 1; else return 0; } void map_search(int i,int j,int k,int m) { if(ac(i,j,k+1) && map[i][j][k+1]<=(map[i][j][k]+m) && map[i][j][k+1]>=(map[i][j][k]-m)) { low[i][j][k+1]=false; map_search(i,j,k+1,m); } if(ac(i,j,k-1) && map[i][j][k-1]<=(map[i][j][k]+m) && map[i][j][k-1]>=(map[i][j][k]-m)) { low[i][j][k-1]=false; map_search(i,j,k-1,m); } if(ac(i,j+1,k) && map[i][j+1][k]<=(map[i][j][k]+m) && map[i][j+1][k]>=(map[i][j][k]-m)) { low[i][j+1][k]=false; map_search(i,j+1,k,m); } if(ac(i,j-1,k) && map[i][j-1][k]<=(map[i][j][k]+m) && map[i][j-1][k]>=(map[i][j][k]-m)) { low[i][j-1][k]=false; map_search(i,j-1,k,m); } if(ac(i+1,j,k) && map[i+1][j][k]<=(map[i][j][k]+m) && map[i+1][j][k]>=(map[i][j][k]-m)) { low[i+1][j][k]=false; map_search(i+1,j,k,m); } if(ac(i-1,j,k) && map[i-1][j][k]<=(map[i][j][k]+m) && map[i-1][j][k]>=(map[i][j][k]-m)) { low[i-1][j][k]=false; map_search(i-1,j,k,m); } } int main() { while(scanf("%d%d%d",&l,&w,&h)!=EOF) { memset(low,true,sizeof(low)); memset(map,0,sizeof(map)); count=0; scanf("%d",&m); for(int i=0;i<l;i++) { for(int j=0;j<w;j++) { for(int k=0;k<h;k++) { scanf("%d",&map[i][j][k]); } } } for(int i=0;i<l;i++) { for(int j=0;j<w;j++) { for(int k=0;k<h;k++) { if(low[i][j][k]) { count++; low[i][j][k]=false; map_search(i,j,k,m); //printf("yes\n"); } } } } printf("%d\n",count); } return 0; }
#include <cstdio> #include <cstring> #include <queue> #include <cmath> using namespace std; struct Node { int x,y,z; }; int map[55][55][55]; bool lis[55][55][55]; int m; int fang[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}}; queue<Node>v; int x,y,z,l,w,h,count; int ac(int x,int y,int z) { if(x>=0 && x<l && y>=0 && y<w && z>=0 && z<h && lis[x][y][z]) return 1; else return 0; } int main() { Node aa,bb; while(~scanf("%d%d%d",&l,&w,&h)) { scanf("%d",&m); memset(map,-10000,sizeof(map)); memset(lis,true,sizeof(lis)); for(int i=0;i<l;i++) for(int j=0;j<w;j++) for(int k=0;k<h;k++) scanf("%d",&map[i][j][k]); count=0; while(!v.empty()) v.pop(); for(int i=0;i<l;i++) { for(int j=0;j<w;j++) { for(int k=0;k<h;k++) { if(lis[i][j][k]) { aa.x=i; aa.y=j; aa.z=k; v.push(aa); while(!v.empty()) { aa=v.front(); v.pop(); for(int ii=0;ii<6;ii++) { bb.x=aa.x+fang[ii][0]; bb.y=aa.y+fang[ii][1]; bb.z=aa.z+fang[ii][2]; if(ac(bb.x,bb.y,bb.z) && map[bb.x][bb.y][bb.z] <= map[aa.x][aa.y][aa.z]+m && map[bb.x][bb.y][bb.z]>=map[aa.x][aa.y][aa.z]-m) { lis[bb.x][bb.y][bb.z]=false; v.push(bb); } } } count++; } } } } printf("%d\n",count); } return 0; }