第十四届蓝桥杯集训——练习解题阶段(无序阶段)-试题 基础练习 十六进制转八进制

2023-02-16 09:41:32 浏览数 (1)

第十四届蓝桥杯集训——练习解题阶段(无序阶段)-试题 基础练习 十六进制转八进制


目录

第十四届蓝桥杯集训——练习解题阶段(无序阶段)-试题 基础练习 十六进制转八进制

前言

十六进制转八进制

C语言

C 语言

Java语言

Python语言

总结


前言

        最近的一些文章都可能会很碎,写到哪里是哪里,过一阵子会具体的整理一遍,这里其它的类型题先往后排一排,因为蓝桥最后考的也就是对题目逻辑的理解能力,也就是dp分析能力了,所以就主要目标定在这里,最近的题目会很散,很多,基本上都是网罗全网的一些dp练习题进行二次训练,准备比赛的学生底子薄的先不建议看啊,当然,脑子快的例外,可以直接跳过之前的一切直接来看即可,只需要你在高中的时候数学成绩还可以那就没啥问题,其实,dp就是规律总结,我们只需要推导出对应题目的数学规律就可以直接操作,可能是一维数组,也可能是二维数组,总体来看二维数组的较多,但是如果能降为的话建议降为,因为如果降为起来你看看时间复杂度就知道咋回事了,那么在这里祝大家能无序的各种看明白,争取能帮助到大家。


十六进制转八进制

资源限制

内存限制:512.0MB   C/C 时间限制:1.0s   Java时间限制:3.0s   Python时间限制:5.0s

问题描述

  给定n个十六进制正整数,输出它们对应的八进制数。

输入格式

  输入的第一行为一个正整数n (1<=n<=10)。   接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

输出格式

  输出n行,每行为输入对应的八进制正整数。

  【注意】   输入的十六进制数不会有前导0,比如012A。   输出的八进制数也不能有前导0。

样例输入

2 39 123ABC

样例输出

71 4435274

【提示】

  先将十六进制数转换成某进制数,再由某进制数转换成八进制。

题解:

C语言

由于没有函数帮着处理只能自己写操作,超级麻烦。

代码语言:javascript复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MaxSize 100000

void saveB(char *b,char c3,char c2,char c1,char c0,int start)
{
	b[start]=c3;
	b[start 1]=c2;
	b[start 2]=c1;
	b[start 3]=c0;
}
int htob(char *h,char *b)
{
	int i,j;
	int hl=strlen(h);
	for(i=0;i<hl;i  )
		switch(h[i])
		{
			case '0':
				{
					saveB(b,'0','0','0','0',4*i);
					break;
				}
			case '1':
				{
					saveB(b,'0','0','0','1',4*i);
					break;
				}
			case '2':
				{
					saveB(b,'0','0','1','0',4*i);
					break;
				}
			case '3':
				{
					saveB(b,'0','0','1','1',4*i);
					break;
				}
			case '4':
				{
					saveB(b,'0','1','0','0',4*i);
					break;
				}
			case '5':
				{
					saveB(b,'0','1','0','1',4*i);
					break;
				}
			case '6':
				{
					saveB(b,'0','1','1','0',4*i);
					break;
				}
			case '7':
				{
					saveB(b,'0','1','1','1',4*i);
					break;
				}
			case '8':
				{
					saveB(b,'1','0','0','0',4*i);
					break;
				}
			case '9':
				{
					saveB(b,'1','0','0','1',4*i);
					break;
				}
			case 'A':
				{
					saveB(b,'1','0','1','0',4*i);
					break;
				}
			case 'B':
				{
					saveB(b,'1','0','1','1',4*i);
					break;
				}
			case 'C':
				{
					saveB(b,'1','1','0','0',4*i);
					break;
				}
			case 'D':
				{
					saveB(b,'1','1','0','1',4*i);
					break;
				}
			case 'E':
				{
					saveB(b,'1','1','1','0',4*i);
					break;
				}
			case 'F':
				{
					saveB(b,'1','1','1','1',4*i);
					break;
				}
		}
	return 4*hl;
}
int btoo(char *b,char *o,int bl)
{
	int i,j;
	int ol;
	int value;
	if(bl%3==0)
		ol=bl/3;
	else
		ol=bl/3 1;
	j=bl-1;
	for(i=ol-1;i>=0;i--)
	{
		if(i>0)
			o[i]=b[j]-48 (b[j-1]-48)*2 (b[j-2]-48)*4 48;
		else
		{
			switch(j)
			{
				case 2:
					o[i]=b[j]-48 (b[j-1]-48)*2 (b[j-2]-48)*4 48;
					break;
				case 1:
					o[i]=b[j]-48 (b[j-1]-48)*2 48;
					break;
				case 0:
					o[i]=b[j];
					break;
			}

		}
		j=j-3;
	}
	return ol;
}
void printO(char *o,int ol)
{
	int i=0;
	if(o[0]=='0')
		i=1;
	for(;i<ol;i  )
	{
		printf("%c",o[i]);
	}
	printf("n");
}
main()
{
	char h[MaxSize];
	char b[4*MaxSize];
	char o[4*MaxSize/3 1];
	int n,i,bl,ol;
	scanf("%d",&n);
	getchar();
	for(i=0;i<n;i  )
	{
		gets(h);
		bl=htob(h,b);
		ol=btoo(b,o,bl);
		
		printO(o,ol);
	}
}

C 语言

也是由于没有函数,所以非常麻烦。

代码语言:javascript复制
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <STDLIB.H>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int GetI(char c)
{
	return c>>4&1?c&15:(c&15) 9; 
}

int main(int argc, char *argv[]) {
	char arr[200001] = {''};
	char brr[400001] = {''};
	int n = 0;
	int i = 0;
	scanf("%d",&n);

	for(i = 0;i < n;i  )
	{
		scanf("%s",arr);
		int m[3] = {1,16,256};
		int len = strlen(arr);
		int j = len-1;
		int a,b,c;
		a = b = c = 0;
		int k = 0,l = 0;
		int count = 0;
		while(j>-1)
		{

			a  = (arr[j]>>4&1?arr[j]&15:(arr[j]&15) 9)*m[k]; //个位
			if(k==2||j==0)
			{
				while(a)
				{
					brr[l  ] = ((a&7)|48);
					a = a>>3;
					count  ;
				}
				while(j!=0&&count<4)
				{
					brr[l  ] = '0';
					count  ;
				}
				count = 0;
			}
			k = (k 1)%3;
			j--;
		}
		strrev(brr);
		printf("%sn",brr);
		memset(arr,'',(sizeof(char)*200001));
		memset(brr,'',(sizeof(char)*400001));
	}
    return 0; 
}

Java语言

用函数很方便,但是我们也可以自己来写。

代码语言:javascript复制
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main{
	public static void main(String[] args)throws NumberFormatException,
    IOException  
{
BufferedReader buf = new BufferedReader(
        new InputStreamReader(System.in));
int n = Integer.parseInt(buf.readLine());
int l = 0,j=0,k=0,p=0;
String m1="";
String m2="";
char arr[];
String ss[] = new String[n];
while ((n--)!=0)
{
    m1=buf.readLine();
    l=m1.length();
    m2=hexToBinary(m1);
    l=m2.length();
    switch(l%3){
        case 1:m2="00" m2;break;
        case 2:m2="0" m2;break;
        default:break;
    }
    arr=new char [m2.length()/3];
    for ( k=0,j=0;k<m2.length()-2;k =3)
    {
        char c=(char)((m2.charAt(k)-'0')*4 (m2.charAt(k 1)-'0')*2 (m2.charAt(k 2)-'0') '0');
        if (k==0&&c=='0')
        {
            continue;
        }
        arr[j]=c;j  ;
    }
    ss[p]=new String(arr);
    p  ;
}
for (int i=0;i<p ;i   )
{
    System.out.println(ss[i]);
}
}
public static String hexToBinary(String hexNum){
char[] chs = {'0','1'};
String str = new String("0123456789ABCDEF");
char[] charArray = hexNum.toCharArray();
int pos = charArray.length*4;
char[] binaryArray = new char[pos];
for (int i = charArray.length - 1; i >=0; i--) {
    int temp = str.indexOf(charArray[i]);
    for(int j=0;j<4;j  ){
        binaryArray[--pos] = chs[temp & 1];
        temp = temp >>> 1;
    }
}
return new String(binaryArray);
}


		} 

Python语言

Python语言既然简介,那么咱们就更简洁一些。

代码语言:javascript复制
n = int(input())
for i in range(0,n):
    num = eval("0x" input().strip())
    print("%o" % (num))

总结

其实在正式解题的时候我们利用Java的函数也能直接的解出来,还是非常方便的呢。当然也可以使用Python的那种形式,Java也有。

0 人点赞