Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不明确的排列问题代码:PERMUT2(codechef)_C_Algorithm - Fatal编程技术网

不明确的排列问题代码:PERMUT2(codechef)

不明确的排列问题代码:PERMUT2(codechef),c,algorithm,C,Algorithm,检查歧义排列 输入: 输入包含几个测试用例。 每个测试用例的第一行包含一个整数n(1≤ N≤ 100000). 然后在下一行中出现整数1到n的排列。连续整数之间正好有一个空格字符。您可以假设1和n之间的每个整数在排列中正好出现一次。 最后一个测试用例后面是一个零 输出: 对于每个测试用例输出,无论排列是否不明确。遵循示例输出中显示的格式 我的输出是正确的,但是代码在提交时返回了错误的答案。不知道怎么了 int main(void) { int n, i, c, d; while

检查歧义排列

输入: 输入包含几个测试用例。 每个测试用例的第一行包含一个整数n(1≤ N≤ 100000). 然后在下一行中出现整数1到n的排列。连续整数之间正好有一个空格字符。您可以假设1和n之间的每个整数在排列中正好出现一次。 最后一个测试用例后面是一个零

输出: 对于每个测试用例输出,无论排列是否不明确。遵循示例输出中显示的格式

我的输出是正确的,但是代码在提交时返回了错误的答案。不知道怎么了


int main(void) {
    int n, i, c, d;
    while(scanf("%d", &n), n!=0){
        c=0;
        int a[n];
        for(i=0; i<n; i++){
        scanf("%ld", &a[i]);
        c=c*10+a[i];
        }
        i=n;
        int b[n];
        while(i>0){
            b[a[i-1]-1]=i;
            --i;
        }
        d=0;
        for(i=0; i<n; i++){
            d=d*10+b[i];
        }
        c==d ? printf("ambiguous\n") : printf("not ambiguous\n");
    }
    return 0;
}

内部主(空){
int n,i,c,d;
而(scanf(“%d”,&n),n!=0){
c=0;
int a[n];
对于(i=0;i0){
b[a[i-1]-1]=i;
--一,;
}
d=0;

对于(i=0;i我理解您的思维过程,排列所代表的和和与逆排列所代表的和应该是相同的,但这并非在所有情况下都是正确的,因为可能存在一些排列,它们的和是相等的,但它们并不含糊

一种更简单、更稳健的方法是检查排列的每个元素是否与逆排列匹配

检查以下代码,该代码在Codechef上已接受状态:

#include<stdio.h>

int main(void) {
    int n, i;
    while(scanf("%d", &n), n!=0){

        int a[n];
        for(i=0; i<n; i++){
            scanf("%d", &a[i]);
        }
        i=n;
        int b[n];
        while(i>0){
            b[a[i-1]-1]=i;
            --i;
        }

        int flg = 1;

        for(int i=0;i<n;i++){
            if(a[i]!=b[i]){
                flg = 0;
                break;
            }
        }
        (flg==1) ? printf("ambiguous\n") : printf("not ambiguous\n");
    }
    return 0;
}
#包括
内部主(空){
int n,i;
而(scanf(“%d”,&n),n!=0){
int a[n];
对于(i=0;i0){
b[a[i-1]-1]=i;
--一,;
}
int flg=1;

对于(int i=0;i
scanf(“%ld”,&a[i])
的类型错误。代码丢失了
#include
即使在更正后,我也会得到相同的代码error@SarvashwaKrSingh,请看一看我的回答什么是模糊排列?@Sarvashwa Kr Singh,这解决了你的问题吗?如果是,请你在不回答的向上投票按钮下方标记正确答案阿利尔,我明白你的意思,谢谢!