编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间
#287 #1001. A. 神秘谜题 Compile Error 0 0 ms 0 K C++ 11 (NOI) / 2.3 K galaxy 2019-06-24 14:43:18
显示原始代码
#include <string>
#include <stdio.h>
#include <iostream>
#include <stack>
#include <math.h>
using namespace std;
#define max(a, b) a >= b ? a : b

int change_to_bin(int num) {
    int result = 0, k = 1, i, n;
    n = num;
    while (n) {
        i = n % 2;
        result += k * i;
        k *= 10;
        n /= 2;
    }
    // printf("%d\n",result);
    return (result);
}
int change_to_decimal(int num) {
    int result = 0, n, i, j = 0;
    n = num;
    while (n) {
        i = n % 10;
        result += i * pow(2, j);
        // printf("result:%d,i=:%d\n",result,i);
        j += 1;
        n /= 10;
    }
    // printf("%d",result);
    return (result);
}

int my_xor(int a, int b) {
    int i, aa, bb, lena = 1, lenb = 1, len, k = 10, result = 0;
    aa = change_to_bin(a);
    bb = change_to_bin(b);
    while (aa / k) {
        lena += 1;
        k *= 10;
    }
    while (bb / k) {
        lenb += 1;
        k *= 10;
    }
    len = max(lena, lenb);
    // printf("len:%d\n",len);
    k = 1;
    for (i = 0; i < len; i++) {
        result += k * ((aa % (k * 10) / k) ^ (bb % (k * 10) / k));
        // if(k==1)result+=k*((aa%(k*10))^(bb%(k*10)));
        //		printf("(aa%(k*10)):%d,(bb%(k*10))=:%d\n",(aa%(k*10)),(bb%(k*10)));
        //		printf("???%d???\n",((aa%(k*10))^(bb%(k*10))));
        //		printf("result:%d,k=:%d\n",result,k);
        k *= 10;
    }
    // printf("%d",result);
    result = change_to_decimal(result);
    return (result);
}
int main() {
    int n, i, j, f, k, num_list = 0, act_num, action, act_bin, con;
    int mid;  //定义中间变量,用于便利计算异或。之前异或写的是两两之间。
    scanf("%d", &n);
    act_num = 0;
    int act[n], list[n];
    while (act_num < n) {  //这个是操作数要少于输入的第一个

        scanf("%d", &act_bin);  //输入操作类型,1或者2
        if (act_bin == 2) {
            scanf("%d", &con);  //输入要加入的数字
            list[num_list] = con;
            num_list += 1;
            act_num += 1;
        }
        if (act_bin == 1) {
            for (j = 0; j < num_list; j++) list[j] += 1;  //全部都加一
            act_num += 1;
        }
        mid = list[0];
        for (j = 1; j < num_list; j++) {
            mid = my_xor(mid, list[j]);
        }
        // printf("??%d??\n",mid);
        for (j = 0; j < num_list; j++)
        // printf("all num:%d \n",list[j]);
    }

    //	for(i=0;i<n;i++)scanf("%d",&act[i]);
    //	for(i=0;i<n;i++){
    //		k=1;
    //		while(act[i]/k){
    //			k*=10;
    //		}
    //		if(act[i]/(k/10)==2){
    //		list[num_list]=act[i]%k;//过滤掉首位的1
    //		num_list+=1;
    //		}
    //		if(act[i]/(k/10)==1){
    //			for(j=0;j<num_list;j++)list[j]+=1;//全部都加一
    //		}
    //		mid=list[0];
    //		for(j=1;j<num_list;j++){
    //			mid=my_xor(mid,list[j]);
    //		}
    //		printf("%d\n",mid);
    //	}
}

编译信息

/sandbox/1/a.cpp: In function 'int main()':
/sandbox/1/a.cpp:90:2: error: expected primary-expression before '}' token
  }
  ^
/sandbox/1/a.cpp:90:2: error: expected ';' before '}' token
/sandbox/1/a.cpp:66:16: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d",&n);
                ^
/sandbox/1/a.cpp:72:23: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d",&act_bin);//输入操作类型,1或者2
                       ^
/sandbox/1/a.cpp:74:20: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
    scanf("%d",&con);//输入要加入的数字 
                    ^