mamaaini 发表于 2023-12-5 23:09:48

b转a不对

设有一个数组 int A;数组中存放的元素为0~N−1之间的整数,且A≠A(当i≠j时)。例如: N=6时,有A=(4,3,0,5,1,2) 此时,数组A的编码定义如下: A的编码为0,A的编码为:在A,A,……A中比A的值小的个数(i=1,2……N
-1)∴上面数组A的编码为:B=(0,0,0,3,1,2)
输入描述
每个测试文件只包含一组测试数据,每组输入包含三行。
第一行输入整数N

第二行输入有两种可能:
例如:
A=(4,3,0,5,1,2)

B=(0,0,0,3,1,2)
其中输入中的逗号和括号都是英文状态下的。

输出描述
当输入的是A=(...),则输出其编码。
当输入的是B=(...),则输出A中的原数据。
输出数据的格式和输入数据的格式是一样的。
#include<stdio.h>
int a,b,flag={0};
int main()
{
    int n,i,j,k;
    char ch;
    scanf("%d",&n);
    getchar();
    scanf("%c",&ch);
    scanf("=(");
    scanf("%d",&a);
    for(i=1;i<n;i++)
    {
      scanf(",%d",&a);
      a++;
    }
    scanf(")");
    if(ch=='A')
    {
      for(i=1;i<n;i++)
      {
            int num=0;
            for(j=0;j<i;j++)
            {
                if(a>a)
                {
                  num++;
                }
            }
            b=num;
      }
      printf("B=(%d",b);
      for(i=1;i<n;i++)
      {
            printf(",%d",b);
      }
      printf(")");
    }
    else
    {
      for(i=n-1;i>=0;i--)
      {
            j=0,k=0;
            do
            {
                if(flag==0)
                {
                  j++;
                }
                k++;
            }while(j<a);
            flag[--k]=1;
            b=k;
      }
      printf("A=(%d",b);
      for(i=1;i<n;i++)
      {
            printf(",%d",b);
      }
      printf(")");
    }
    return 0;
}
别乱改字母,B解码成A为啥不对

FishC_GPT 发表于 2023-12-5 23:10:59

首先,我们需要根据输入的字符判断是输入的是数组A还是数组B。假设输入的是数组A,则我们需要根据A计算出对应的数组B。如果输入的是数组B,则直接输出数组A即可。

以下是完整代码的示例:

#include <stdio.h>

int main() {
    int n, i, j, a;
    char ch;

    scanf("%d", &n);// 输入数组的长度
    getchar();
    scanf("%c", &ch);

    if (ch == 'A') {// 如果输入的是数组A,则计算出数组B并输出
      int B;

      for (i = 0; i < n; i++) {
            scanf("%d,", &a);
            B = 0;// 初始化数组B的元素为0
            for (j = 0; j < i; j++) {
                if (a > B) {
                  B += 1;// 如果a比B大,则B递增
                }
            }
      }

      // 输出数组B
      printf("B=(");
      for (i = 0; i < n - 1; i++) {
            printf("%d,", B);
      }
      printf("%d)\n", B);

    } else if (ch == 'B') {// 如果输入的是数组B,则直接输出数组A
      int A, B;
      
      for (i = 0; i < n; i++) {
            scanf("%d,", &B);
      }

      // 根据数组B计算出数组A
      for (i = 0; i < n; i++) {
            A = 0;
            for (j = 0; j < i; j++) {
                if (B < B) {
                  A += 1;
                }
            }
      }

      // 输出数组A
      printf("A=(");
      for (i = 0; i < n - 1; i++) {
            printf("%d,", A);
      }
      printf("%d)\n", A);
    }

    return 0;
}

这段代码中,我们先判断输入的是数组A还是数组B,然后定义两个数组A和B。如果输入的是数组A,则依次读取A的元素,并根据A计算出对应的数组B。最后输出数组B。如果输入的是数组B,则依次读取B的元素,并根据B计算出对应的数组A。最后输出数组A。

希望这段代码可以帮助到你!如果还有疑问,请随时提问。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: b转a不对