acm hnu 10182 置换排列

这是一个C语言程序,用于解决ACM HNU 10182问题,检查输入的整数序列是否为置换排列。程序读取测试用例数量和每个用例的整数序列,通过遍历和比较来判断序列是否为置换排列,并输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

置换排列
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 " );
       
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值