编号 | 题目 | 状态 | 分数 | 总时间 | 内存 | 代码 / 答案文件 | 提交者 | 提交时间 |
---|---|---|---|---|---|---|---|---|
#286 | #1001. A. 神秘谜题 | Compile Error | 0 | 0 ms | 0 K | C++ / 2.3 K | galaxy | 2019-06-24 14:42:20 |
#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:66:7: 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:8: 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:9: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d",&con);//输入要加入的数字
~~~~~^~~~~~~~~~~