鱼C论坛

 找回密码
 立即注册
查看: 934|回复: 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中的原数据。
输出数据的格式和输入数据的格式是一样的。
#include<stdio.h>
int a[10000],b[1000],flag[1000]={0};
int main()
{
    int n,i,j,k;
    char ch;
    scanf("%d",&n);
    getchar();
    scanf("%c",&ch);
    scanf("=(");
    scanf("%d",&a[0]);
    for(i=1;i<n;i++)
    {
        scanf(",%d",&a[i]);
        a[i]++;
    }
    scanf(")");
    if(ch=='A')
    {
        for(i=1;i<n;i++)
        {
            int num=0;
            for(j=0;j<i;j++)
            {
                if(a[i]>a[j])
                {
                    num++;
                }
            }
            b[i]=num;
        }
        printf("B=(%d",b[0]);
        for(i=1;i<n;i++)
        {
            printf(",%d",b[i]);
        }
        printf(")");
    }
    else
    {
        for(i=n-1;i>=0;i--)
        {
            j=0,k=0;
            do
            {
                if(flag[k]==0)
                {
                    j++;
                }
                k++;
            }while(j<a[i]);
            flag[--k]=1;
            b[i]=k;
        }
        printf("A=(%d",b[0]);
        for(i=1;i<n;i++)
        {
            printf(",%d",b[i]);
        }
        printf(")");
    }
    return 0;
}
别乱改字母,B解码成A为啥不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[n];        for (i = 0; i < n; i++) {            scanf("%d,", &a);            B[i] = 0;  // 初始化数组B的元素为0            for (j = 0; j < i; j++) {                if (a > B[j]) {                    B[i] += 1;  // 如果a比B[j]大,则B[i]递增                }            }        }        // 输出数组B        printf("B=(");        for (i = 0; i < n - 1; i++) {            printf("%d,", B[i]);        }        printf("%d)\n", B[n - 1]);    } else if (ch == 'B') {  // 如果输入的是数组B,则直接输出数组A        int A[n], B[n];                for (i = 0; i < n; i++) {            scanf("%d,", &B[i]);        }        // 根据数组B计算出数组A        for (i = 0; i < n; i++) {            A[i] = 0;            for (j = 0; j < i; j++) {                if (B[j] < B[i]) {                    A[i] += 1;                }            }        }        // 输出数组A        printf("A=(");        for (i = 0; i < n - 1; i++) {            printf("%d,", A[i]);        }        printf("%d)\n", A[n - 1]);    }    return 0;}
这段代码中,我们先判断输入的是数组A还是数组B,然后定义两个数组A和B。如果输入的是数组A,则依次读取A的元素,并根据A计算出对应的数组B。最后输出数组B。如果输入的是数组B,则依次读取B的元素,并根据B计算出对应的数组A。最后输出数组A。

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

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-5 04:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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