acm hnu 10182 置换排列

这是一个C语言程序,用于解决ACM HNU 10182问题,检查输入的整数序列是否为置换排列。程序读取测试用例数量和每个用例的整数序列,通过遍历和比较来判断序列是否为置换排列,并输出结果。
置换排列
Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:32768KB
Total submit users: 201, Accepted users: 193
Problem 10182 : No special judgement
Problem description
给定一个自然数n 和 1到n的一个排列,比如 4 及 排列 1 4 3 2,我们说1放在第1个位置,第1个位置放了1,4放在第2个位置,第4个位置放2,3放在第3个位置,第3个位置放了3;我们可以输出yes;但是对5 以及 排列 2 3 4 5 1 却不成立,我们输出no。

Input
第一行t,表示测试数据的个数接下来的t行每行是n 和 1到n的一个排列共n+1个自然数,n<=100。

Output
对每个测试数据输出yes 或者 no。

Sample Input
3
4 1 4 3 2
5 2 3 4 5 1
1 1
Sample Output
yes
no
yes
Problem Source
CSU 1st Contest
#include <stdio.h>
#define MAX 150
#define YES 1
#define NO 0
main()
{
 
int p=0,k=0,n=0,i=0,j=0,flag;
 
int num[MAX];
 
 scanf(
"%d",&k);
 
for(p=0;p<k;p++){
     scanf(
"%d",&n);
     
for(i=1;i<=n;i++)scanf("%d",&num[i]);
     
for(i=1;i<=n;i++){
        
if( (num[num[i]] == i) )flag=YES;
        
else {flag=NO; break;}                
     }
     
if(flag==YES)printf("yes ");
     
else printf("no ");
     
                  
 }
 system(
"PAUSE");
       
}
 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值