蓝桥杯练习系统(1)

1.时间转换

问题描述
  给定一个以秒为单位的时间t,要求用“<H>:<M>:<S>”的格式来表示这个时间。<H>表示时间,<M>表示分钟,而<S>表示秒,它们都是整数且没有前导的“0”。例如,若t=0,则应输出是“0:0:0”;若t=3661,则输出“1:1:1”。
  输入格式
  输入只有一行,是一个整数t(0<=t<=86399)。
输出格式
  输出只有一行,是以“<H>:<M>:<S>”的格式所表示的时间,不包括引号。
样例输入
0
样例输出
0:0:0
样例输入
5436
样例输出
1:30:36 
资源限制
时间限制:1.0s   内存限制:512.0MB

#include <stdio.h>
int main(){
	int t;
	scanf("%d",&t);
	int h=0,m=0,s=0;
	if(t%3600==0){
		h=t/3600;
	} 
	else{
		h=t/3600;
		t = t-h*3600;
		if(t%60==0){
			m=t/60;
		}
		else{
			m=t/60;
			t=t-m*60;
			s=t;
		}
	}
	printf("%d:%d:%d",h,m,s);
	return 0;
} 

2.字符串对比

问题描述
  给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一:
  1:两个字符串长度不等。比如 Beijing 和 Hebei
  2:两个字符串不仅长度相等,而且相应位置上的字符完全一致(区分大小写),比如 Beijing 和 Beijing
  3:两个字符串长度相等,相应位置上的字符仅在不区分大小写的前提下才能达到完全一致(也就是说,它并不满足情况2)。比如 beijing 和 BEIjing
  4:两个字符串长度相等,但是即使是不区分大小写也不能使这两个字符串一致。比如 Beijing 和 Nanjing
  编程判断输入的两个字符串之间的关系属于这四类中的哪一类,给出所属的类的编号。
输入格式
  包括两行,每行都是一个字符串
输出格式
  仅有一个数字,表明这两个字符串的关系编号
样例输入
BEIjing
beiJing
样例输出
3
#include <stdio.h>
#include <string.h>

int main(){
	char str1[10];
	char str2[10];
	int count=0;
	scanf("%s %s",&str1,&str2);
	
	if(strlen(str1)==strlen(str2)){
		if(strcmp(str1,str2)==0){
			count=2;
		}	
		else if(stricmp(str1,str2)==0){
			count=3;
		}	
		else
			count=4;
	}
	else{
		count=1;
	}
		
	printf("%d",count);
	return 0;
}

3.分解质因数

问题描述

  求出区间[a,b]中所有整数的质因数分解。

输入格式

  输入两个整数a,b。

输出格式

  每行输出一个数的分解,形如k=a1*a2*a3...(a1<=a2<=a3...,k也是从小到大的)(具体可看样例)

样例输入

3 10

样例输出

3=3
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5

提示

  先筛出所有素数,然后再分解。

数据规模和约定

  2<=a<=b<=10000

资源限制

时间限制:1.0s   内存限制:512.0MB

#include <stdio.h>
#include <math.h>
//判断是否是质数
int is(int i){
	//C语言中1为真,0未假 
	if(i==1)
        return 1;
    if(i==2||i==3)
        return 1;
    if(i%6!=1&&i%6!=5)
        return 0;
    int s=sqrt(i);
    int j=0;
    for(j=5;j<=s;j+=6)
        if(i%j==0||i%(j+2)==0)
            return 0;
    return 1;

} 
int main(){
	int a,b;
	scanf("%d %d",&a,&b);
	int i,j,c;
	for(i=a;i<=b;i++){
		if(is(i)==1){
			printf("%d=%d\n",i,i);
			
		}
		else{
			printf("%d=",i);
			c=i;  //必须赋给一个新的值,这样改变也不影响整体循环 
			while(c != 1){
				for(j=2 ; j<=c ; j++){
					if(is(j) && c%j == 0){
						printf("%d",j);
						if(j != c ){
							printf("*");
						}
						c = c/j;
						j = 1; 
						if(c==1){
							printf("\n");
						}
					}
				}		
			}
		}
	}
	return 0;
}

这个题在进行测评时出现超时,后来我改善了判断质数的方法,就完全正确了

4.矩阵乘法

问题描述

  给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
  例如:
  A =
  1 2
  3 4
  A的2次幂
  7 10
  15 22

输入格式

  第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数
  接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值

输出格式

  输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开

样例输入

2 2
1 2
3 4

样例输出

7 10
15 22

资源限制

时间限制:1.0s   内存限制:512.0MB

#include <stdio.h>
int main(){
	int N,M;
	scanf("%d %d",&N,&M);
	int a[N][N];
	int i,j,c;
	int count=M;
	int b[N][N];
	int x[N][N];
	for(i=0;i<N;i++){
		for(j=0;j<N;j++){
			scanf("%d",&a[i][j]);
		}
	}
	for(i=0;i<N;i++){
		for(j=0;j<N;j++){
			b[i][j]=a[i][j];
			x[i][j]=0;
		}
	}
	while(M>1){
		for(i=0;i<N;i++){
			for(j=0;j<N;j++){
				for(c=0;c<N;c++){
					x[i][j]+=a[i][c]*b[c][j];  //重点语句
					
				}
			}
		}
		
		M--;
		if(M>1){
			for(i=0;i<N;i++){
				for(j=0;j<N;j++){
					a[i][j]=x[i][j];
					x[i][j]=0;
				}
			}
		}
	}
	if(count==1){    //矩阵的1次幂,就是它本身
		for(i=0;i<N;i++){
			for(j=0;j<N;j++){
				printf("%d ",a[i][j]);
			}
			printf("\n");
		}
	}
	else if(count==0){   //矩阵的0次幂,是同阶单位矩阵
		for(i=0;i<N;i++){
			for(j=0;j<N;j++){
				if(i==j){
					printf("1 ");
				}
				else{
					printf("0 ");
				}
			}
			printf("\n");
		}
	}
	else{
		for(i=0;i<N;i++){
			for(j=0;j<N;j++){
				printf("%d ",x[i][j]);
			}
			printf("\n");
		}
	}
	return 0;
}

这个要注意矩阵语句“x[i][j]+=a[i][c]*b[c][j];”  //矩阵乘积=左矩阵的行乘右矩阵的列

之前我写的是“x[i][j]+=a[i][c]*b[c][i];”就一直得不到正确答案

还要注意多种情况,在测评时,会出现求矩阵的0次幂的用例,要注意矩阵的0次幂是同阶单位矩阵

5.矩形面积交

问题描述

  平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。

输入格式

  输入仅包含两行,每行描述一个矩形。
  在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。

输出格式

  输出仅包含一个实数,为交的面积,保留到小数后两位。

样例输入

1 1 3 3
2 2 4 4

样例输出

1.00

资源限制

时间限制:1.0s   内存限制:512.0MB

#include<stdio.h>
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)<(y)?(x):(y))
int main(){
    double x1,y1,x2,y2;    //矩形1
    double x3,y3,x4,y4;    //矩形2
    double m1,n1;        //交集左上角坐标.
    double m2,n2;        //交集右下角坐标.
    scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
    scanf("%lf%lf%lf%lf",&x3,&y3,&x4,&y4);
    m1 = max(min(x1,x2),min(x3,x4));
    n1 = max(min(y1,y2),min(y3,y4));
    m2 = min(max(x1,x2),max(x3,x4));
    n2 = min(max(y1,y2),max(y3,y4));
    if(m2>m1 && n2>n1)
        printf("%.2f\n",(m2 - m1)*(n2 - n1));
    else
        printf("0.00\n");
    return 0;
} 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值