mamaaini 发表于 2023-12-9 11:17:28

字符为B咋没输出

编码问题。输入6 A=(4,3,0,5,1,2)输出B=(0,0,0,3,1,2)。
输入6 B=(0,0,0,3,1,2)输出A=(4,3,0,5,1,2) 
#include<stdio.h>
int main()
{
    int n,i,j;
    int a,b;
int flag;
    char ch;
    scanf("%d",&n);
   getchar();
    scanf("%c",&ch);
    scanf("=(");
    scanf("%d",&a);
    for(i=1;i<n;i++)
    {
      scanf(",%d",&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(")");

    }
    if(ch=='B')
    {
      for(i=0;i<n;i++)
      {
            for(j=n-1;j>=0;j--)
            {
                if((a==0)&&(!flag))
                {
                  flag=1;
                  b=i;
                  for(int k=j;k<n;k++)
                  {
                        a--;
                  }
                  break;
                }
            }
      }
      printf("A=(");
      printf("%d",b);
      for(i=1;i<n;i++)
      {
            printf(",%d",b);
      }
      printf(")");
    }
    return 0;
}

FishC 发表于 2023-12-9 11:17:49

你的代码中没有输出字符B的部分,因此无法确定具体是哪里出了问题。不过根据你提供的输入和输出的样例,可以看出这是一个字符编码的问题。

在C语言中,字符是用ASCII码表示的,'A'对应的ASCII码是65,而'A'之后的字母依次递增。因此,若要将字符A转换为字符B,只需要将ASCII码加1即可。

下面是一个参考代码,可以将字符A转换为字符B,并输出结果:

#include <stdio.h>

int main()
{
    char ch = 'A';// 定义一个字符变量ch,并赋值为'A'
   
    ch++;// 将ch的ASCII码加1,即将A转换为B
   
    printf("%c\n", ch);// 输出字符B
   
    return 0;
}

当然,这只是一个简单的示例,实际中可能需要根据具体的需求进行更复杂的编码转换操作。希望能帮到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

mamaaini 发表于 2023-12-9 11:19:00

FishC 发表于 2023-12-9 11:20:05

mamaaini 发表于 2023-12-09 11:19
设有一个数组 int A;数组中存放的元素为0~N−1 ...

问题①:给出数组A后,求出其编码。

解决方案:
可以使用两层循环嵌套来实现。外层循环遍历数组A中的每一个元素,内层循环用于比较当前元素和其他元素的大小关系,统计比当前元素小的个数,并将统计结果存入编码数组B中。

下面是一个示例代码:

#include <stdio.h>

void encode(int A[], int B[], int N) {
    for (int i = 0; i < N; i++) {
      int count = 0;
      for (int j = 0; j < N; j++) {
            if (A < A) {
                count++;
            }
      }
      B = count;
    }
}

int main() {
    int A[] = {4, 3, 0, 5, 1, 2};
    int N = sizeof(A) / sizeof(A);
    int B;

    encode(A, B, N);

    printf("Array A: ");
    for (int i = 0; i < N; i++) {
      printf("%d ", A);
    }
    printf("\n");

    printf("Encoded array B: ");
    for (int i = 0; i < N; i++) {
      printf("%d ", B);
    }
    printf("\n");

    return 0;
}

运行代码会输出:

Array A: 4 3 0 5 1 2
Encoded array B: 0 0 0 3 1 2

问题②:给出数组A的编码后,求出A中的原数据。

解决方案:
可以使用一个辅助数组C来存储原始数据。遍历编码数组B,根据当前元素的值在辅助数组C中找到对应的位置,并将原始数据填充到数组A中。

以下是示例代码:

#include <stdio.h>

void decode(int B[], int A[], int N) {
    int C;
    for (int i = 0; i < N; i++) {
      C = -1; // 初始化辅助数组C
    }

    for (int i = 0; i < N; i++) {
      int count = 0;
      for (int j = 0; j < N; j++) {
            if (C == -1) { // 判断C 是否已经被填充过
                if (count == B) {
                  A = i;
                  C = i;
                  break;
                }
                count++;
            }
      }
    }
}

int main() {
    int B[] = {0, 0, 0, 3, 1, 2};
    int N = sizeof(B) / sizeof(B);
    int A;

    decode(B, A, N);

    printf("Decoded array A: ");
    for (int i = 0; i < N; i++) {
      printf("%d ", A);
    }
    printf("\n");

    return 0;
}

运行代码会输出:

Decoded array A: 4 3 0 5 1 2

希望可以解决你的问题!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 字符为B咋没输出