cccccct_1 2020-12-14 19:36 采纳率: 94.1%
浏览 6
已结题

c语言 转移问题?萌新求教

有n个孩子,他们每个人都在读一本独一无二的书。在任何一天结束时,第i个孩子会把他的书给第p[i]个孩子(如果i=p[i],孩子会把他的书给自己)。保证p[ i]的所有值都是从1到n的不同整数。序列p不会每天变化,它是固定的。

例如,如果n=6,p=[4,6,1,3,5,2],那么在第一天结束时,第一个孩子的书将属于第四个孩子,第二个孩子将属于第六个孩子,依此类推。第二天结束时,第一个孩子的书将属于第三个孩子,第二个孩子的书将属于第二个孩子等等。

你的任务是确定第i个孩子(i从1到n)的书第一次归还给他的日期。

考虑以下示例:p=[5,1,2,4,3]。

第一个孩子的书将传给以下孩子:

第一天之后,它将属于第五个孩子,

第二天之后,它将属于第三个孩子,

第三天之后,它将属于第二个孩子,

第四天之后,它将属于第一个孩子。

所以在第四天之后,第一个孩子的书将归还给最开始拥有它的人。

第四个孩子的书将在一天后第一次回到他身边。

输入

输入的第一行包含一个整数q(1≤q≤200)-测试用例数

测试用例的第一行包含一个整数n(1≤n≤200)。测试用例的第二行包含n个整数p1,p2,…,pn(1≤p i≤n,所有pi都是不同的),其中pi是将得到第i个孩子的书的孩子。

输出

对于每个测试用例,在上面打印答案:n整数a1,a2,…,an,其中ai是在该测试用例中第一次将第i个孩子的书本归还给他的日期。

Example

input

6

5

1 2 3 4 5

3

2 3 1

6

4 6 2 1 5 3

1

1

4

3 4 1 2

5

5 1 2 4 3

output

1 1 1 1 1

3 3 3

2 3 3 2 1 3

1

2 2 2 2

4 4 4 1 4

  • 写回答

1条回答 默认 最新

  • 风一样的航哥 2020-12-14 21:39
    关注

    一下子输入6个test case太多了,输入太多了。上传一个一次测试一个用例的程序。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main()
    {
    	int N=0,i=0,n=1;
    	int temp=0;
    	printf("please input the sizeof array:");
    	scanf("%d",&N);
    	int *p=NULL,*p1=NULL;
    	p=(int *)malloc(N*sizeof(int));
    	p1=(int *)malloc(N*sizeof(int));
    	memset(p1,0,sizeof(p1));
    	printf("please input element of array(use space split):\n");
    	for(i=0;i<N;i++)
    	{
    		scanf("%d",&p[i]);
    	}
    	for(i=0;i<N;i++)
    	{
    		temp=p[i]-1;
    		n=1;
    		while(i!=temp)
    		{
    			temp=p[temp]-1;
    			n++;
    		}
    		p1[i]=n;
    	}
    	for(i=0;i<N;i++)
    	{
    		printf("%d ",p1[i]);
    	}
    	free(p);
    	free(p1);
    	return 0;
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月16日
  • 已采纳回答 5月8日

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题