使用特殊XOR条件进行数组排序

时间:2018-11-18 23:08:18

标签: c

我在理解程序状态时遇到问题,我很难用一句话来解释它,所以我将解释整个程序的要点。

因此,对于我的家庭作业,我必须制作一个程序,要求用户输入数字N来表示数组中元素的数量,然后用户输入该数组中的元素(假设用户将输入正确的元素数量)程序然后需要使用XOR(^)运算符将该数组中的每个数字与数字X进行比较。

任务是找到该X的最小值,在该最小值中,所得数组将具有按升序排列的元素。听起来有点复杂,但这是应该的工作方式:

  • 您输入数字N:例如让我们使用4。
  • 然后输入4个元素的1D数组:让我们使用4 2 3 1
  • 然后程序需要使用数字X(执行while循环)来测试来自 具有该数字的数组,如果该数字> =前一个数字,则为
    应该继续检查下一个和下一个,直到达到数字N
  • 如果每个元素都按升序排序(等于升序) 应该显示该数字。
  • 因此对于我们的示例4 2 3 1,当您对其中的每一个使用XOR操作时
    X = 6时得到的数组看起来像2 4 5 7 订单。
  • 要说明:二进制中的4是100;如果在X上使用XOR,则二进制X为110 那些您得到010等于2的值,其余执行以下操作(程序执行 一切)

所以我编写了程序,每个例子都能很好地返回良好的值,供我们参考,我的唯一问题是我不知道何时停止寻找该数字X,或者我怎么知道最小值该数字数组的X不存在。在这种情况下,我的程序将永远运行并且不返回任何值,因此基本上是一个无限循环。

我需要使用简单的代码,所以不要太复杂,因为这是一门“编程入门”课程,他们不会接受使用复杂算法或类似方法制作的任何东西。

EDIt:如果没有X,程序应显示-1。

这是代码:

  #include <stdio.h>

 int main() {

     int matrix[100];
     int n;

     int i;

     int index=1;
     int x=0;

     int start=0;
     int end=0;

    printf("Enter N: ");
    scanf("%d",&n);

     for(i=1;i<=n;i++){
         scanf("%d",&matrix[i]);
     }

         index=1;
         x=0;
         do {
             start=matrix[index]^x;
                 if((matrix[index+1]^x) >= start)
                     index=index+1;
                else x++;

                 if(index==n){
                     printf("X=%d",x);
                     end=1;
                     break;
                 }

        } while(end!=1);

     return 0; }

0 个答案:

没有答案