蓝桥杯习题

这个月我都不知道忙什么了,反正蓝桥杯就这样过去了,把自己的整理的习题发上去吧。

问题描述

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

输入格式

  输入的第一行为一个正整数n (1<=n<=10)。

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

输出格式

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

注意

  输入的十六进制数不会有前导0,比如012A。

  输出的八进制数也不能有前导0。

样例输入

2

39

123ABC

样例输出

71

4435274

提示

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

<span style="font-size:18px;">#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define MAXSIZE 100000

//输出
void Print(char *data,int n){
 int i;
 for(i=n-1;i>=0;i--)
    printf("%c",data[i]);
    printf("\0");
 printf("\n");
}

//去掉前缀0
int Trim(char *data,int n){
 while(data[--n]=='0');
  return n+1;
}
//初始化
void Init(char *data,int n){
 int i;
 for(i=0;i<n;i++)
 data[i]='0';
}

//16进制转化2进制
int HexToBinary(char *hex,char *binary){
 int i;
 int value;
 int hex_n=strlen(hex);
 int binary_n=0;
 int length=4*hex_n;

 if(length%3==1)  length+=2;
 else if(length%2==2)  length++;

 Init(binary,length);

 for(i=hex_n-1;i>=0;i--){
  int count=0;
  switch(hex[i])
  {
   case 'A':value=10;break;
   case 'B':value=11;break;
   case 'C':value=12;break;
   case 'D':value=13;break;
   case 'E':value=14;break;
   case 'F':value=15;break;
   default:value=hex[i]-'0';
  }

  while(value)
  {
   binary[binary_n+count]=value%2+'0';
   count++;
   value/=2;
  }
  binary_n+=4;
 }
 return length;
}
//2进制转化8进制
int BinaryToOctal(char *binary,int binary_n,char *octal){
 int i;
 int n=0;
 for(i=0;i+2<binary_n;i+=3){
  octal[n++]=(binary[i]-'0')+(binary[i+1]-'0')*2+(binary[i+2]-'0')*2*2+'0';
 }
 return n;
}

int main(){
 int n;
 int i;
 char hex[MAXSIZE];
 char octal[3*MAXSIZE];
 int octal_n;
 char binary[4*MAXSIZE];
 int binary_n;
 scanf("%d",&n);
 getchar();
 for(i=0;i<n;i++)
 {
  gets(hex);
  binary_n=HexToBinary(hex,binary);
  octal_n=BinaryToOctal(binary,binary_n,octal);
  octal_n=Trim(octal,octal_n);
  Print(octal,octal_n);
 }
   return 0;
}
</span>

16进制转化10进制

#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
    char a[8];
    int i=0,length=0;
    long int value=0;
    gets(a);
    length=strlen(a);
    while(length)
    {
        if(a[length-1]>='A'&&a[length-1]<='F')
           value+=(a[length-1]-'7')*pow(16,i++);
        else
           value+=(a[length-1]-'0')*pow(16,i++);

        length--;

    }
    printf("%I64d",value);

    return 0;
}

问题描述

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

输入格式

  输入的第一行为一个正整数n (1<=n<=10)。

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

输出格式

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

注意

  输入的十六进制数不会有前导0,比如012A。

  输出的八进制数也不能有前导0。

样例输入

2

39

123ABC

样例输出

71

4435274

提示

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

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define MAXSIZE 100000

//输出
void Print(char *data,int n){
	int i;
	for(i=n-1;i>=0;i--)
	   printf("%c",data[i]);
	   printf("\0");
	printf("\n");
}

//去掉前缀0
int Trim(char *data,int n){
	while(data[--n]=='0');
	 return n+1;
}
//初始化
void Init(char *data,int n){
	int i;
	for(i=0;i<n;i++)
	data[i]='0';
}

//16进制转化2进制
int HexToBinary(char *hex,char *binary){
	int i;
	int value;
	int hex_n=strlen(hex);
	int binary_n=0;
	int length=4*hex_n;

	if(length%3==1)  length+=2;
	else if(length%2==2)  length++;

	Init(binary,length);

	for(i=hex_n-1;i>=0;i--){
		int count=0;
		switch(hex[i])
		{
			case 'A':value=10;break;
			case 'B':value=11;break;
			case 'C':value=12;break;
			case 'D':value=13;break;
			case 'E':value=14;break;
			case 'F':value=15;break;
			default:value=hex[i]-'0';
		}

		while(value)
		{
			binary[binary_n+count]=value%2+'0';
			count++;
			value/=2;
		}
		binary_n+=4;
	}
	return length;
}
//2进制转化8进制
int BinaryToOctal(char *binary,int binary_n,char *octal){
	int i;
	int n=0;
	for(i=0;i+2<binary_n;i+=3){
		octal[n++]=(binary[i]-'0')+(binary[i+1]-'0')*2+(binary[i+2]-'0')*2*2+'0';
	}
	return n;
}

int main(){
	int n;
	int i;
	char hex[MAXSIZE];
	char octal[3*MAXSIZE];
	int octal_n;
	char binary[4*MAXSIZE];
	int binary_n;
	scanf("%d",&n);
	getchar();
	for(i=0;i<n;i++)
	{
		gets(hex);
		binary_n=HexToBinary(hex,binary);
		octal_n=BinaryToOctal(binary,binary_n,octal);
		octal_n=Trim(octal,octal_n);
		Print(octal,octal_n);
	}
   return 0;
}

某涉密单位下发了某种票据,并要在年终全部收回。每张票据有唯一的ID号。全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号。通过编程,找出断号的ID和重号的ID。假设断号不可能发生在最大和最小号。

输入格式

要求程序首先输入一个整数N(N<100)表示后面数据行数。

接着读入N行数据。每行数据长度不等,是用空格分开的若干个(不大于100个)正整数(不大于100000),请注意行内和行末可能有多余的空格,你的程序需要能处理这些空格。每个整数代表一个ID号。

输出格式

要求程序输出1行,含两个整数m n,用空格分隔。

其中,m表示断号ID,n表示重号ID

#include<stdio.h>

 int main(){
   int a[10001]={0};
   char c;
   long m,min=100000,max=0,i,n;
   scanf("%d",&n);
   for(i=0;i<n;i++)
     while(1)
 	{
 		scanf("%ld",&m);
 		if(m>max) max=m;
 		if(m<min) min=m;
 		a[m]++;
 		c=getchar();
 		if(c!=' ') break;
 	}

 	for(i=min;i<=max;i++)
 	{
 		if(a[i]==0)
 		   printf("%ld ",i);
 		if(a[i]==2)
 	       m=i;
 	}
 	printf("%ld",m);

 	return 0;
 }

 从键盘读入n个整数放入数组中,编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移动。注意,CompactIntegers函数需要接受数组及其元素个数作为参数,函数返回值应为删除操作执行后数组的新元素个数。输出删除后数组中元素的个数并依次输出数组元素。  样例输入: (输入格式说明:5为输入数据的个数,3 4 0 0 2 是以空格隔开的5个整数)

  5

  3 4 0 0 2

  样例输出:(输出格式说明:3为非零数据的个数,3 4 2 是以空格隔开的3个非零整数)

  3

  3 4 2

样例输入

7

0 0 7 0 0 9 0

样例输出

2

7 9

样例输入

3

0 0 0

样例输出

0

#include <cstdio>
#include <cstdlib>
int CompactIntegers(int a[],int n)
{
	int i,j;

	for(i = j = 0;j < n;j++){
		if(a[j])
			a[i++] = a[j];
	}

	return i;
}

int main(int argc, char* argv[])
{
	int *a;
	int n;

	scanf("%d",&n);
	a = (int *)malloc(n * sizeof(int));

	for(int i = 0;i < n;i++){
		scanf("%d",a+i);
	}

	n = CompactIntegers(a,n);

	printf("%d\n",n);

    return 0;
}

#include<stdio.h>
#include<stdlib.h>

int CompactIntegers(int *a,int n){
	int i,j;
	for(i=0;i<n;i++)
	{
	     if(a[i]==0)
		 {

		   for(j=i;j<n-1;j++)
		       a[j]=a[j+1];
		 	n--;
		 	i--;

		 }

	}
	    return n;
}

int main()
{
     int n,i;
     int m;
	 int *a;
	 scanf("%d",&n);
	 a=(int *)malloc(n*sizeof(int));
	 for(i=0;i<n;i++)
	   scanf("%d",&a[i]);
	 m=CompactIntegers(a,n);
	 printf("%d\n",m);
     for(i=0;i<m;i++)
	   printf("%d ",a[i]);
	  printf("\n");
	return 0;
}

 从键盘读入n个整数,使用动态数组存储所读入的整数,并计算它们的和与平均值分别输出。要求尽可能使用函数实现程序代码。平均值为小数的只保留其整数部分。

样例输入

5

3 4 0 0 2

样例输出

9 1

样例输入

7

3 2 7 5 2 9 1

样例输出

29 4

#include <cstdio>
#include <vector>
using namespace std;

int main(int argc, char* argv[])
{
	vector<int> a;
	int n;
	long long sum = 0;
	vector<int>::iterator ivec;

	scanf("%d",&n);
	for(int i = 0;i < n;i++){
		int temp;
		scanf("%d",&temp);
		a.push_back(temp);
	}

	for(ivec = a.begin();ivec != a.end();ivec++){
		sum += *ivec;
	}
	printf("%I64d %I64d",sum,sum/n);
}

问题描述

  编写一个程序,输入一个字符串(长度不超过20),然后把这个字符串内的每一个字符进行大小写变换,即将大写字母变成小写,小写字母变成大写,然后把这个新的字符串输出。

  输入格式:输入一个字符串,而且这个字符串当中只包含英文字母,不包含其他类型的字符,也没有空格。

  输出格式:输出经过转换后的字符串。

  输入输出样例

样例输入

AeDb

样例输出

aEdB

#include <cstdio>
#include <cstring>
#define N 21

int main(int argc, char* argv[])
{
	char str[N];

	gets(str);
	for(int i = 0;i < strlen(str);i++){
		if(str[i] >= 'a' && str[i] <= 'z')
			str[i] -= 32;
		else
			str[i] += 32;
	}	

	puts(str);

问题描述

  输入两个矩阵,分别是m*s,s*n大小。输出两个矩阵相乘的结果。

输入格式

  第一行,空格隔开的三个正整数m,s,n(均不超过200)。

  接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j)。

  接下来s行,每行n个空格隔开的整数,表示矩阵B(i,j)。

输出格式

  m行,每行n个空格隔开的整数,输出相乘後的矩阵C(i,j)的值。

样例输入

2 3 2

1 0 -1

1 1 -3

0 3

1 2

3 1

样例输出

-3 2

-8 2

提示

矩阵C应该是m行n列,其中C(i,j)等于矩阵A第i行行向量与矩阵B第j列列向量的内积。

例如样例中C(1,1)=(1,0,-1)*(0,1,3) = 1 * 0 +0*1+(-1)*3=-3

#include <cstdio>
#define MAX 220

int main(void)
{
	int m,n,s;
	int m1[MAX][MAX],m2[MAX][MAX],p[MAX][MAX];

	scanf("%d%d%d",&m,&s,&n);

	//init
	for(int i = 0;i < m;i++){
		for(int j = 0;j < s;j++){
			scanf("%d",m1[i]+j);
		}
	}

	for(int i = 0;i < s;i++){
		for(int j = 0;j < n;j++){
			scanf("%d",m2[i]+j);
		}
	}

	for(int i = 0;i < m;i++){//遍历m1的行
		for(int j = 0;j < n;j++){//遍历m2的列
			int sum = 0;
			for(int k = 0;k < s;k++){//做乘法,输入到p
				sum += m1[i][k] * m2[k][j];
			}
			p[i][j] = sum;
		}
	}

	for(int i = 0;i < m;i++){
		for(int j = 0;j < n;j++){

#include<stdio.h>
int main(){
	int m,s,n;
	int i,j,k;
	int a[100][100]={0},b[100][100]={0},c[100][100]={0};
	scanf("%d%d%d",&m,&s,&n);
	for(i=0;i<m;i++)
	   for(j=0;j<s;j++)
	     scanf("%d",&a[i][j]);
	for(j=0;j<s;j++)
		for(i=0;i<n;i++)
		 scanf("%d",&b[j][i]);
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
         for(k=0;k<s;k++)
             c[i][j]+=a[i][k]*b[k][j];
    for(i=0;i<m;i++)
     {
     	for(j=0;j<n;j++)
         printf("%d ",c[i][j]);
       printf("\n");
     }  

}

问题描述

  编写一个程序,输入3个整数,然后程序将对这三个整数按照从大到小进行排列。

  输入格式:输入只有一行,即三个整数,中间用空格隔开。

  输出格式:输出只有一行,即排序后的结果。

  输入输出样例

样例输入

9 2 30

样例输出

30 9 2

#include <stdio.h>

int main(int argc, char* argv[])
{
	int a[3];

	scanf("%d%d%d",a,a+1,a+2);
	for(int i = 0;i < 2;i++)
		for(int j = i+1;j < 3;j++)
			if(a[i] < a[j]){
				a[i] = a[i] ^ a[j];
				a[j] = a[i] ^ a[j];
				a[i] = a[i] ^ a[j];
			}
	printf("%d %d %d",a[0],a[1],a[2]);
	return 0;
}

int main(){
	int a[3];
	scanf("%d%d%d",a,a+1,a+2);
	for(int i=0;i<2;i++)
	 for(int j=i+1;j<3;j++)
	   if(a[i]<a[j]){
	      a[i]=a[i]+a[j];
	      a[j]=a[i]-a[j];
	      a[i]=a[i]-a[j];
	   }
	 printf("%d %d %d",a[0],a[1],a[2]);
	   return 0;
}

问题描述

给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。

输入格式

第一行包含一个数n,表示序列长度。

第二行包含n个正整数,表示给定的序列。

第三个包含一个正整数m,表示询问个数。

接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。

输出格式

总共输出m行,每行一个数,表示询问的答案。

样例输入

5

1 2 3 4 5

2

1 5 2

2 3 2

样例输出

4

2

数据规模与约定

对于30%的数据,n,m<=100;

对于100%的数据,n,m<=1000;

保证k<=(r-l+1),序列中的数<=106。

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
 int i,j,t,temp;
 int n,m,l,r,k;
 int *a,*copy;

 scanf("%d",&n);
 a = (int *)malloc( (n+1) * sizeof(int) );
 for(i=1;i<=n;i++)
  scanf("%d",a+i);
 scanf("%d",&m);
 for(t=0;t<m;t++){
  scanf("%d%d%d",&l,&r,&k);
  copy = (int *)malloc( (r-l+1) * sizeof(int) );
  for(i=0;i<r-l+1;i++)
   copy[i] = a[l+i];
  for(i=0;i<r-l;i++){
   for(j=i+1;j<r-l+1;j++){
    if(copy[i] < copy[j]){
     temp = copy[i];
     copy[i] = copy[j];
     copy[j] = temp;
    }
   }
  }
  printf("%d\n",copy[k-1]);
  free(copy);
 }
 

将字符串转化成整形数字

#include<stdio.h>
#include<string.h>

int Translate(char *ch,int *a){
	int i=0;
    int y;
	char *p=ch;
//	fflush(stdin);
	while(*p)
	{
		if(*p>='0'&&*p<='9')
		{
		    y=0;
			while(*p!=' '&&*p)
			{
			  y=y*10+*p-'0';
			  p++;

			}
			a[i++]=y;
		}
		p++;		       

	}
	return i-1;

}

int main(){
	char ch[1000];
	int  a[50]={0};
	int n;
	int i;
	 gets(ch);
     n=Translate(ch,a);
     printf("num=%d\n",n);
     for(i=0;i<=n;i++)
       printf("%d ",a[i]);
    printf("\n");
	return 0;
}

问题描述

  给两组数,各n个。

  请调整每组数的排列顺序,使得两组数据相同下标元素对应相乘,然后相加的和最小。要求程序输出这个最小值。

  例如两组数分别为:1 3  -5和-2 4 1

  那么对应乘积取和的最小值应为:

  (-5) * 4 + 3 * (-2) + 1 * 1 = -25

输入格式

  第一个行一个数T表示数据组数。后面每组数据,先读入一个n,接下来两行每行n个数,每个数的绝对值小于等于1000。

  n<=8,T<=1000

输出格式

  一个数表示答案。

样例输入

231 3 -5-2 4 151 2 3 4 51 0 1 0 1

样例输出

-256

#include <cstdio>
#define N 10

int main(void)
{
	int a[N],b[N];
	int n;
	int min = 0;
	int T;

	scanf("%d",&T);

	for(int k = 0;k < T;k++){
		min = 0;
		scanf("%d",&n);

		for(int i = 0;i < n;i++)
			scanf("%d",a+i);

		for(int i = 0;i < n;i++)
			scanf("%d",b+i);

		for(int i = 0;i < n;i++){
			for(int j = 0;j < n;j++){
				if(a[i] < a[j]){
					int temp = a[i];
					a[i] = a[j];
					a[j] = temp;
				}
			}
		}

		for(int i = 0;i < n;i++){
			for(int j = 0;j < n;j++){
				if(b[i] > b[j]){
					int temp = b[i];
					b[i] = b[j];
					b[j] = temp;
				}
			}
		}
}

问题描述

  编写一个程序,读入一组整数(不超过20个),并把它们保存在一个整型数组中。当用户输入0时,表示输入结束。然后程序将把这个数组中的值按逆序重新存放,并打印出来。例如:假设用户输入了一组数据:7 19 -5 6 2 0,那么程序将会把前五个有效数据保存在一个数组中,即7 19 -5 6 2,然后把这个数组中的值按逆序重新存放,即变成了2 6 -5 19 7,然后把它们打印出来。

  输入格式:输入只有一行,由若干个整数组成,中间用空格隔开,最末尾的整数为0。

  输出格式:输出也只有一行,即逆序排列后的整数,中间用空格隔开,末尾没有空格。

  输入输出样例

样例输入

7 19 -5 6 2 0

样例输出

2 6 -5 19 7

#include <cstdio>
#define N 20

int main(void){
	int a[N];
	int n = 0;
	int temp;

	while(1){
		scanf("%d",&temp);
		if(temp == 0)
			break;
		else
			a[n++] = temp;
	}

	for(int i = n-1;i >= 0;i--)
		printf("%d ",a[i]);

return 0;
}

#include<stdio.h>

int main()
{
	int a[20];
	int i=0,n,j;
	while(1){
	   scanf("%d",&a[i]);
	   if(a[i]==0)
	       break;
	   i++;

	}
	for(j=i-1;j>=0;j--)
	   printf("%d ",a[j]);
	printf("\n");

	return 0;
}

问题描述

  编写一个程序,读入一组整数(不超过20个),当用户输入0时,表示输入结束。然后程序将从这组整数中,把第二大的那个整数找出来,并把它打印出来。说明:(1)0表示输入结束,它本身并不计入这组整数中。(2)在这组整数中,既有正数,也可能有负数。(3)这组整数的个数不少于2个。

  输入格式:输入只有一行,包括若干个整数,中间用空格隔开,最后一个整数为0。

  输出格式:输出第二大的那个整数。

  输入输出样例

样例输入

5 8 -12 7 0

样例输出

7

#include <cstdio>
#define N 25

int main(void)
{
	int a[N];
	int n;

	for(n = 0;n < 20;){
		scanf("%d",a+n);
		if(a[n] == 0)
			break;
		else
			n++;
	}

	for(int i = 0;i < n-1;i++){
		for(int j = i+1;j < n;j++){
			if(a[i] < a[j]){
				int temp = a[i];
				a[i] = a[j];
				a[j] = temp;
			}
		}
	}

}

  编写函数Normalize,将复数归一化,即若复数为a+bi,归一化结果为a/sqrt(a*a+b*b) + i*b/sqrt(a*a+b*b) 。使用结构体指针类型作为函数参数可能是必要的。其中实部和虚部由键盘输入,输出为归一化结果,如果归一化结果的实部或虚部为小数的要求保留一位小数。

  样例输入:(格式说明:3 4 分别为以空格隔开的实数的实部和虚部)

  3 4

样例输出

0.6+0.8i

样例输入

2 5

样例输出

0.4+0.9i

#include <cstdio>
#include <cmath>
#define N 20

typedef struct node{
	int a;
	int b;
}data;  

int main(void){
	data d;
	double ta,tb,tn;

	scanf("%d%d",&d.a,&d.b);
	tn = (double)sqrt(d.a*d.a+d.b*d.b);
	ta = d.a / tn;
	tb = d.b / tn;
}

问题描述

  观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。

  本题要求你找到一些5位或6位的十进制数字。满足如下要求:

  该数字的各个数位之和等于输入的整数。

输入格式

  一个正整数 n (10<n<100), 表示要求满足的数位和。

输出格式

  若干行,每行包含一个满足要求的5位或6位整数。

  数字按从小到大的顺序排列。

  如果没有满足条件的,输出:-1

样例输入

44

样例输出

99899

499994

589985

598895

679976

688886

697796

769967

778877

787787

796697

859958

868868

877778

886688

895598

949949

958859

967769

976679

985589

994499

样例输入

60

样例输出

-1

#include <stdio.h>

int main(void)
{
	int n;
	int tag = 1;

	scanf("%d",&n);

	for(int i = 10000;i <= 999999;i++){
		int s = 0;
		int x = i;
		int count = 0;
		while(x){
			int temp = x%10;
			x/=10;
			s = s*10 + temp;
			count += temp;
		}
		if(count == n && s == i){
			printf("%d\n",i);
			tag = 0;
		}
	}

	if(tag)

      printf("-1");
 return 0;
}

题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。

例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int n;
	int *a;
	int i;
	int sum=0,bettersum=0;
	scanf("%d",&n);
	a=(int *)malloc(sizeof(int)*n);
	for(i=0;i<n;i++)
	  scanf("%d",a+i);
    for(i=0;i<n;i++){
           sum+=a[i];
           //如果当前和值为零,则把当前和值置为零
		   if(sum<0)
		      sum=0;
		//如果当前和值大于最优值,则最优值记录当前和值
		   if(bettersum<sum)
		      bettersum=sum;    	

    }
    //如果数组全为负值,只需要找到一个最大的负值
	if(0==bettersum) {
		bettersum=a[0];
		for(i=0;i<n;i++){
			if(a[i]>bettersum)
			  bettersum=a[i];
		}
	}

    printf("bettersum=%d\n",bettersum);
	return 0;
} 
时间: 2024-12-29 11:41:14

蓝桥杯习题的相关文章

算法-蓝桥杯习题

蓝桥杯习题 习题更新ing...... 入门训练(4题) 1 /* 2 入门训练 A+B问题 3 4 问题描述 5 输入A.B,输出A+B. 6 说明:在“问题描述”这部分,会给出试题的意思,以及所要求的目标. 7 输入格式 8 输入的第一行包括两个整数,由空格分隔,分别表示A.B. 9 说明:“输入格式”是描述在测试你的程序时,所给的输入一定满足的格式. 10 11 做题时你应该假设所给的输入是一定满足输入格式的要求的,所以你不需要对输入的格式进行检查.多余的格式检查可能会适得其反,使用你的程

算法-蓝桥杯习题(七)

蓝桥杯习题 蓝桥杯练习系统习题加答案,总共分为6部分,90%习题使用C语言解答,部分使用C++或者Java.大部分习题为搜索参考或者别人提供所得,不足之处在所难免,恳请批评指正(预计200多题,习题仅供学习交流) 目录 算法训练(详见 算法-蓝桥杯习题(一))Go 算法训练(详见 算法-蓝桥杯习题(二))Go 算法提高(waiting...) 历届试题(详见 算法-蓝桥杯习题(六))Go 历届试题(详见 算法-蓝桥杯习题(七))Go 蓝桥杯练习系统评测数据 链接: http://pan.baid

算法-蓝桥杯习题(六)

蓝桥杯习题 蓝桥杯练习系统习题加答案,总共分为6部分,90%习题使用C语言解答,部分使用C++或者Java.大部分习题为搜索参考或者别人提供所得,不足之处在所难免,恳请批评指正(预计200多题,习题仅供学习交流) 目录 算法训练(详见 算法-蓝桥杯习题(一))Go 算法训练(详见 算法-蓝桥杯习题(二))Go 算法提高(waiting...) 历届试题(详见 算法-蓝桥杯习题(六))Go 历届试题(详见 算法-蓝桥杯习题(七))Go 蓝桥杯练习系统评测数据 链接: http://pan.baid

算法-蓝桥杯习题(四)

蓝桥杯习题 蓝桥杯练习系统习题加答案,总共分为6部分,90%习题使用C语言解答,部分使用C++或者Java.大部分习题为搜索参考或者别人提供所得,不足之处在所难免,恳请批评指正(预计200多题,习题仅供学习交流) 目录 算法训练(详见 算法-蓝桥杯习题(一))Go 算法训练(详见 算法-蓝桥杯习题(二))Go 算法提高(waiting...) 历届试题(详见 算法-蓝桥杯习题(六))Go 历届试题(详见 算法-蓝桥杯习题(七))Go 蓝桥杯练习系统评测数据 链接: http://pan.baid

算法-蓝桥杯习题(二)

蓝桥杯习题 算法训练(111题) 1 /* 2 算法训练 明明的随机数 3 4 问题描述 5 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号.然后再把这些数从小到大排序,按照排好的顺序去找同学做调查.请你协助明明完成“去重”与“排序”的工作. 6 输入格式 7 输入有2行,第1行为1个正整数,表示所生成的随机数的个数: 8 N 9 第2

蓝桥杯习题之第2题

问题描述 给定圆的半径r,求圆的面积. 输入格式 输入包含一个整数r,表示圆的半径. 输出格式 输出一行,包含一个实数,四舍五入保留小数点后7位,表示圆的面积. 说明:在本题中,输入是一个整数,但是输出是一个实数. 对于实数输出的问题,请一定看清楚实数输出的要求,比如本题中要求保留小数点后7位,则你的程序必须严格的输出7位小数,输出过多或者过少的小数位数都是不行的,都会被认为错误. 实数输出的问题如果没有特别说明,舍入都是按四舍五入进行. 样例输入 4 样例输出 50.2654825 数据规模与

蓝桥杯习题之第3题

问题描述 求1+2+3+...+n的值. 输入格式 输入包括一个整数n. 输出格式 输出一行,包括一个整数,表示1+2+3+...+n的值. 样例输入 4 样例输出 10 样例输入 100 说明:有一些试题会给出多组样例输入输出以帮助你更好的做题. 一般在提交之前所有这些样例都需要测试通过才行,但这不代表这几组样例数据都正确了你的程序就是完全正确的,潜在的错误可能仍然导致你的得分较低. 样例输出 5050 数据规模与约定 1 <= n <= 1,000,000,000. 说明:请注意这里的数据

蓝桥杯习题之第4题

问题描述 给定一个长度为n的数列,将这个数列按从小到大的顺序排列.1<=n<=200 输入格式 第一行为一个整数n. 第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000. 输出格式 输出一行,按从小到大的顺序输出排序后的数列. 样例输入 58 3 6 4 9 样例输出 3 4 6 8 9 #include<stdio.h> int main() { int n,i,j,t=0; int str[200]; scanf("%d",&n); f

2015年蓝桥杯省赛B组C/C++(试题+答案)

首先说,这次我是第二次参加蓝桥杯(大学里最后一次),可这次去连个三等都没拿到,有些心灰意冷,比上一次还差, 当时看到成绩出来的时候有些失落,但是跌倒了,再站起来继续跑就可以了.可能是状态不好吧,纯属自我安慰. 接下来我把今年的题目又重新做了一遍,写下了这篇博客,如果也有需要探讨答案的,希望可以有帮助. 第一题: 第1题:统计不含4的数字 题目大意 统计10000至99999中,不包含4的数值个数. 解题分析: 第一种解法: 数学方法,这种是在网上看到的一种解法: 最高位除了0.4不能使用,其余8