`
wen.owen
  • 浏览: 20548 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

2010网易编程挑战赛——另类的异或的参考解答

    博客分类:
  • Java
阅读更多
号称史上最高奖金的编程大赛于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));
		}
	}
}



0
1
分享到:
评论

相关推荐

    PyTorch——解决异或问题XOR

    试设计一个前馈神经网络来解决XOR问题 该前馈神经网络具有两个隐藏神经元和一个输出神经元 github地址 ...代码 # 利用Pytorch解决XOR问题 import torch import torch.nn as nn import torch.nn.functional as F ...

    蓝桥杯2024年第十五届省赛真题-最大异或结点

    蓝桥杯2024年第十五届省赛真题-最大异或结点

    基于C++编程的BP神经网络实现异或问题

    本项目聚焦于利用C++编程语言来实现BP神经网络,并应用于解决经典的异或(XOR)问题。异或问题因其非线性特性,被视为检验神经网络是否具有学习能力的标准问题之一。 首先,我们需要理解BP神经网络的基本结构。BP...

    按位异或校验和计算器.rar_异或_异或在线计算_异或在线运算_按位异或_校验和计算器

    异或(XOR)是一种基本的逻辑运算符,在计算机科学和信息技术中有着广泛的应用,尤其在数据校验、密码学和编码等领域。本压缩包文件“按位异或校验和计算器.rar”提供了一个用于计算异或校验和的工具,特别是针对...

    BP神经网络解决异或问题

    异或问题在计算机科学中是一个基础问题,它展示了非线性可分性的问题,而BP神经网络则通过其非线性映射能力来应对这一挑战。 首先,让我们理解异或问题的本质。异或操作在两个输入之间进行,如果输入相同,则输出为...

    简单的异或加密

    虽然在实际应用中可能因安全性不足而受到限制,但对于学习密码学原理和编程实践,异或加密仍是一个很好的起点。"CalcDemo"程序为我们提供了一个实际操作的平台,帮助我们更好地理解和运用异或加密。

    计算机组成原理与体系结构实验课的异或指令.zip

    在这个实验课中,你将深入学习并实现一个重要的逻辑运算指令——异或(XOR)指令。异或指令在计算机中广泛用于数据处理和计算,因为它提供了一种非破坏性的比较方式,即在不改变原有数据的情况下进行比较。 异或操作...

    异或计算器

    异或计算器是一种专门用于执行异或操作的工具,它能够帮助用户进行二进制或十六进制数值的异或运算,并且通常还提供校验功能,例如8位异或校验。在信息技术和计算机科学中,异或(XOR)运算是一种基本的逻辑运算,...

    C/C++十六进制异或运算

    在IT领域,尤其是在编程中,十六进制(Hexadecimal)是一种常见的数字表示方式,它以16个符号来表示数值,这些符号包括0-9的阿拉伯数字和A-F的字母(A代表10,B代表11,以此类推,直到F代表15)。异或(XOR)运算是...

    labview异或和校验算法

    总的来说,"labview异或和校验算法"涉及到的关键技术包括LabVIEW编程、ASCII码的处理、异或运算以及校验和的计算。这个主题对于理解和应用数据校验以及LabVIEW编程技术具有实际意义,特别是对于需要确保数据完整性和...

    易语言异或解密源码(增加多线程批量解密)

    本资源主要关注的是易语言中的一种特定技术——异或解密,以及如何通过多线程批量处理来提高效率。以下是关于这个主题的详细解释。 异或(XOR)解密是一种常见的加密和解密方法,基于异或运算的性质。在二进制计算...

    异或计算器 xor calc

    在编程领域,异或运算符(XOR)是一种基本的逻辑运算,它在加密、校验和计算以及数据比较等方面有着广泛应用。本项目是使用Qt框架开发的一个图形用户界面应用,其主要功能是对16进制数字进行字节级别的异或操作,...

    CRC计算器、和、异或、异或取反校验

    CRC计算器是实现这一校验过程的工具,它可以对数据进行和、异或、异或取反等不同的校验操作。 在通信和存储系统中,CRC校验是至关重要的,因为它能有效地检测出数据在传输过程中可能出现的单个比特错误或多比特错误...

    16进制异或小工具,非常方便

    4. **内存操作**:在编程中,异或常用于位操作,如改变特定比特位的状态,或者在内存操作中无处不在的“清零”或“置一”操作。 对于源码开放的小工具,开发者可以: - **学习与实践**:查看源码,了解异或操作的...

    另类的异或---进行多进制,无制位的加法运算!

    这里我们定义一种另类的异或A op B, op是一个仅由^组成的字符串,如果op中包含n个^,那么A op B表示A和B之间进行n+1进制的无进位的加法。 下图展示了3 ^ 5 和 4 ^^ 5的计算过程 输入 第一行有一个正整数T, 表示...

    求异或值的软件

    3. **内存操作**:在低级别的编程中,比如操作系统或游戏开发,程序员可能会用异或来优化内存读写,比如快速清零或复制一段内存区域。 4. **位操作**:在位操作中,异或可以用于设置、清除或切换某个二进制位,而...

    单片机课程设计——用P0口显示按位异或运算结果.zip

    在本次的单片机课程设计中,我们关注的是利用AT89S52单片机进行C语言编程,实现一个有趣的实用功能:通过P0端口显示按位异或运算的结果。这一设计不仅锻炼了我们的硬件接口操作能力,也深化了对C语言编程的理解。 ...

    趣味编程C语言——C语言经典示例代码

    "趣味编程C语言——C语言经典示例代码"这个资源旨在通过一系列实例来帮助初学者和有经验的开发者深入理解C语言的核心概念。下面,我们将详细探讨其中可能涉及的知识点。 1. **基础语法**:C语言的基础包括变量声明...

Global site tag (gtag.js) - Google Analytics