号称史上最高奖金的编程大赛于5月29号开赛,可惜那几天我正好有事没能参加,闲暇之余看了他们的赛题,觉得题目出得还是不错的。以下的赛题摘自于http://poj.youdao.com/nanti1/A/
----------------------------------
描述
对于普通的异或,其实是二进制的无进位的加法
这里我们定义一种另类的异或A op B, op是一个仅由^组成的字符串,如果op中包含n个^,那么A op B表示A和B之间进行n+1进制的无进位的加法。
下图展示了3 ^ 5 和 4 ^^ 5的计算过程
输入
第一行有一个正整数T, 表示下面共有T组测试数据。
接下来T行,每行有一组测试数据,是由空格隔开的三个部分组成:
A B C
A和C是两个十进制整数,B是一个字符串,由n个^组成
1 <= T <= 100, 0<=A,B<2^30, 1<=n<=1000
输出
每个测试数据输出一行,包含一个数字,即该数据的结果,用十进制表示。
样例输入
2
3 ^ 5
4 ^^ 5
样例输出
6
6
------------------------------------
我的给出的解答源码如下,与大家分享,欢迎其它同学有更好的解答与本人分享:
package com.koober.youdao;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class AnotherXOR {
/**
* @param a 十进制数据
* @param N 待转换的进制
* @return 转换后的每位按逆序(也就是从低位到高位)放到list中返回
*/
List<Integer> convertToNBased(int a, int N){
ArrayList<Integer> resultList = new ArrayList<Integer>();
while(a >= N){
resultList.add(a % N);
a = a / N;
}
resultList.add(a);
return resultList;
}
/**
* 将n进制的数转换回10进制的数
* @param srcList n进制数,逆顺放置在List中,即按位从低位到高位放在srcList中
* @param N 原进制基数
* @return 10进制数
*/
int return10(List<Integer> srcList, int N){
int sum = 0;
for (int i = 0; i < srcList.size(); i++) {
sum += srcList.get(i) * Math.pow(N, i);
}
return Math.round(sum);
}
/**
* 将两个N进制的数进行另类的异或相加
* @param N N进制
* @return 将相加的结果以10进制返回
*/
int addBasedN(List<Integer> a, List<Integer> b, int N){
if (a.size()>b.size()){
for (int i=0, n = b.size(); i< n; i++){
a.set(i, (a.get(i) + b.get(i)) % N);
}
return return10(a, N);
}else{
for (int i=0, n = a.size(); i< n; i++){
b.set(i, (a.get(i) + b.get(i)) % N);
}
return return10(b, N);
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
final int T = scanner.nextInt();
int[] a = new int[T];
int[] b = new int[T];
String[] s = new String[T];
//先读入T组数据并存储
for (int i = 0; i < T; i++){
scanner.nextLine();
a[i] = scanner.nextInt();
s[i] = scanner.next();
b[i] = scanner.nextInt();
}
//处理T组数据,并输出
int N = 0;
AnotherXOR anotherXOR = new AnotherXOR();
for (int i = 0; i < T; i++){
N = s[i].length() + 1;
System.out.println(anotherXOR.addBasedN(anotherXOR.convertToNBased(a[i], N), anotherXOR.convertToNBased(b[i], N), N));
}
}
}
分享到:
相关推荐
试设计一个前馈神经网络来解决XOR问题 该前馈神经网络具有两个隐藏神经元和一个输出神经元 github地址 ...代码 # 利用Pytorch解决XOR问题 import torch import torch.nn as nn import torch.nn.functional as F ...
利用C++语言设计BP神经网络来解决非线性的异或问题
蓝桥杯2024年第十五届省赛真题-最大异或结点
异或校验工具。十六进制异或值计算。。。。。。。。。。
这里我们定义一种另类的异或A op B, op是一个仅由^组成的字符串,如果op中包含n个^,那么A op B表示A和B之间进行n+1进制的无进位的加法。 下图展示了3 ^ 5 和 4 ^^ 5的计算过程 输入 第一行有一个正整数T, 表示...
迹 ——— 二值异或群循环轨迹 ,然后针对这类轨迹提出了一种新的识别算法 ,将求解与基轨 迹相异或的元素值的问题转化为求解轨迹特征位模式的问题 ,并在理论上证明了其正确 性 ,通过这样的处理极大地提高了算法可...
CRC计算器工具,有和、异或、异或取反等校验方法计算,方便前期应用开发
一个比较典型的神经元网络,方便学习.一定可以使用
CString 按位异或 CString 按位异或 CString 按位异或
crc 异或校验 c语言 方便移植
异或计算器,可以执行同时执行和校验与8位异或校验
简单的异或加密,一个小例子,异或加密,需要的朋友,可以自己下载,希望对你有帮助。
使用VS2010的MFC写了一个异或校验的小计算器。 涉及CString转成十六进制存储在数组中,然后使用数组数据进行疑惑校验。 本人也是C++初学者,对初学C++的人可能对进制的转换,以及变量类型的转换很是头疼,希望对初学...
用qt实现的异或计算工具(带源码),16进制输入按字节进行异或,带输入错误提示。
异或校验和工具,用于计算十六进制数据的异或校验和。
求异或值的软件
异或校验.rar
异或加解密工具