XXX定律
对于一个数n,如果是偶数,就把n砍掉一半;如果是奇数,把n变成 3*n+ 1后砍掉一半,直到该数变为1为止。
请计算需要经过几步才能将n变到1,具体可见样例。
继续xxx定律
找出直系亲属
对于一个数n,如果是偶数,就把n砍掉一半;如果是奇数,把n变成 3*n+ 1后砍掉一半,直到该数变为1为止。
请计算需要经过几步才能将n变到1,具体可见样例。
- int main()
- {
- int n;
- while (cin>>n&&n!=0)
- {
- int cnt=0;
- while(n!=1)
- {
- n=n%2?(n*3+1)>>1:n>>1;
- cnt++;
- }
- printf("%d\n",cnt);
- }
- }
读入一个字符串,字符串中包含ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出,当某个字符用完时,剩下的仍然按照ZOJ的顺序输出。
- int main()
- {
- string str;
- while(cin>>str&&str!="E")
- {
- int i;
- int count[26];
- memset(count,0,sizeof(int)*26);
- for (i=0;i<str.length();i++)
- count[str[i]-'A']++;
- int z='Z'-'A',o='O'-'A',j='J'-'A';
- while (count[z]>0||count[o]>0||count[j]>0)
- {
- if(count[z]-->0)
- printf("Z");
- if(count[o]-->0)
- printf("O");
- if(count[j]-->0)
- printf("J");
- }
- printf("\n");
- }
- }
当n为3时,我们在验证xxx定律的过程中会得到一个序列,3,5,8,4,2,1,将3称为关键数,5,8,4,2称为覆盖数。现在输入n个数字a[i],根据关键数与覆盖数的理论,我们只需要验证其中部分数就可以确定所有数满足xxx定律,输出输入的n个数中的关键数。如果其中有多个关键数的话按照其输入顺序的逆序输出。
如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如果A,B是C的(外)祖父,祖母,则A,B是C的grandparent,C是A,B的grandchild,如果A,B是C的(外)曾祖父,曾祖母,则A,B是C的great-grandparent,C是A,B的great-grandchild,之后再多一辈,则在关系上加一个great-。
- int Dfs(char a,char b,int level)
- {
- //分别从a和b往下找
- if(a=='-'||tree[a][0]=='-'&&tree[a][1]=='-')
- return INF;
- if(tree[a][0]==b||tree[a][1]==b)
- return level+1;
- int left=Dfs(tree[a][0],b,level+1);
- int right=Dfs(tree[a][1],b,level+1);
- return min(left,right);
- }
- int main()
- {
- string str;
- int n,m,i,j;
- while (scanf("%d%d",&n,&m)!=EOF&&!(n==0&&m==0))
- {
- memset(tree,'-',sizeof(char)*2*('Z'+10));
- for(i=0;i<n;i++)
- {
- cin>>str;
- tree[str[0]][0]=str[1];
- tree[str[0]][1]=str[2];
- }
- for(i=0;i<m;i++)
- {
- cin>>str;
- int level1=Dfs(str[0],str[1],0);
- int level2=Dfs(str[1],str[0],0);
- int level=level1>=INF?-level2:level1;
- if(abs(level)>=INF)
- {
- printf("-\n");
- continue;
- }
- while (level++<-2)
- printf("great-");
- level--;
- if(level==-1)
- printf("parent\n");
- else if(level==-2)
- printf("grandparent\n");
- while (level-->2)
- printf("great-");
- level++;
- if (level==2)
- printf("grandchild\n");
- else if(level==1)
- printf("child\n");
- }
- }
- }