鱼C论坛

 找回密码
 立即注册
查看: 1318|回复: 1

b转a不对

[复制链接]
发表于 2023-12-5 23:09:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
设有一个数组 int A[N];数组中存放的元素为0~N−1之间的整数,且A[i ]≠A[j](当i≠j时)。例如: N=6时,有A=(4,3,0,5,1,2) 此时,数组A的编码定义如下: A[0]的编码为0,A[i ]的编码为:在A[0],A[1],……A[i-1]中比A[i ]的值小的个数(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中的原数据。
输出数据的格式和输入数据的格式是一样的。
  1. #include<stdio.h>
  2. int a[10000],b[1000],flag[1000]={0};
  3. int main()
  4. {
  5.     int n,i,j,k;
  6.     char ch;
  7.     scanf("%d",&n);
  8.     getchar();
  9.     scanf("%c",&ch);
  10.     scanf("=(");
  11.     scanf("%d",&a[0]);
  12.     for(i=1;i<n;i++)
  13.     {
  14.         scanf(",%d",&a[i]);
  15.         a[i]++;
  16.     }
  17.     scanf(")");
  18.     if(ch=='A')
  19.     {
  20.         for(i=1;i<n;i++)
  21.         {
  22.             int num=0;
  23.             for(j=0;j<i;j++)
  24.             {
  25.                 if(a[i]>a[j])
  26.                 {
  27.                     num++;
  28.                 }
  29.             }
  30.             b[i]=num;
  31.         }
  32.         printf("B=(%d",b[0]);
  33.         for(i=1;i<n;i++)
  34.         {
  35.             printf(",%d",b[i]);
  36.         }
  37.         printf(")");
  38.     }
  39.     else
  40.     {
  41.         for(i=n-1;i>=0;i--)
  42.         {
  43.             j=0,k=0;
  44.             do
  45.             {
  46.                 if(flag[k]==0)
  47.                 {
  48.                     j++;
  49.                 }
  50.                 k++;
  51.             }while(j<a[i]);
  52.             flag[--k]=1;
  53.             b[i]=k;
  54.         }
  55.         printf("A=(%d",b[0]);
  56.         for(i=1;i<n;i++)
  57.         {
  58.             printf(",%d",b[i]);
  59.         }
  60.         printf(")");
  61.     }
  62.     return 0;
  63. }
复制代码

别乱改字母,B解码成A为啥不对
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-12-5 23:10:59 | 显示全部楼层
首先,我们需要根据输入的字符判断是输入的是数组A还是数组B。假设输入的是数组A,则我们需要根据A计算出对应的数组B。如果输入的是数组B,则直接输出数组A即可。

以下是完整代码的示例:
  1. #include <stdio.h>
  2. int main() {
  3.     int n, i, j, a;
  4.     char ch;
  5.     scanf("%d", &n);  // 输入数组的长度
  6.     getchar();
  7.     scanf("%c", &ch);
  8.     if (ch == 'A') {  // 如果输入的是数组A,则计算出数组B并输出
  9.         int B[n];
  10.         for (i = 0; i < n; i++) {
  11.             scanf("%d,", &a);
  12.             B[i] = 0;  // 初始化数组B的元素为0
  13.             for (j = 0; j < i; j++) {
  14.                 if (a > B[j]) {
  15.                     B[i] += 1;  // 如果a比B[j]大,则B[i]递增
  16.                 }
  17.             }
  18.         }
  19.         // 输出数组B
  20.         printf("B=(");
  21.         for (i = 0; i < n - 1; i++) {
  22.             printf("%d,", B[i]);
  23.         }
  24.         printf("%d)\n", B[n - 1]);
  25.     } else if (ch == 'B') {  // 如果输入的是数组B,则直接输出数组A
  26.         int A[n], B[n];
  27.         
  28.         for (i = 0; i < n; i++) {
  29.             scanf("%d,", &B[i]);
  30.         }
  31.         // 根据数组B计算出数组A
  32.         for (i = 0; i < n; i++) {
  33.             A[i] = 0;
  34.             for (j = 0; j < i; j++) {
  35.                 if (B[j] < B[i]) {
  36.                     A[i] += 1;
  37.                 }
  38.             }
  39.         }
  40.         // 输出数组A
  41.         printf("A=(");
  42.         for (i = 0; i < n - 1; i++) {
  43.             printf("%d,", A[i]);
  44.         }
  45.         printf("%d)\n", A[n - 1]);
  46.     }
  47.     return 0;
  48. }
复制代码

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

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

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-21 05:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表