开学后就很少抽空写写题了,所以这次只有几道题目和大家分享一下了。
有些真题也有些VIP基础题,想和大家分享一下。(有些是仿的其他博主的代码,,,,因为有些确实难(呜呜呜~))
不多说,上代码
1.时间转换
给定一个以秒为单位的时间t,要求用“”的格式来表示这个时间。
表示秒,它们都是整数且没有前导的“0”。
例如,若t=0,则应输出是“0:0:0”;若t=3661,则输出“1:1:1”。
一种解法:计算步骤为 时(t/3600)->分(t%3600/60)->秒(t%3600%60)
#include
int main()
{
int t,h,m,s;
scanf("%d",&t);
h=t/3600;
m=(t%3600)/60;
s=((t%3600)%60);
printf("%d:%d:%d",h,m,s);
return 0;
}
钟另一种解法:计算步骤 秒(满60秒钟清零,分钟加1)->分(满60分钟清零,时加1)->时
#include
int main()
{
int h=0,m=0,s=0,i,n;
scanf("%d",&n);
for(i=0;i
2.字符串对比
给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一:
1:两个字符串长度不等。比如 Beijing 和 Hebei
2:两个字符串不仅长度相等,而且相应位置上的字符完全一致(区分大小写),比如 Beijing 和 Beijing
3:两个字符串长度相等,相应位置上的字符仅在不区分大小写的前提下才能达到完全一致(也就是说,它并不满足情况2)。比如 beijing 和 BEIjing
4:两个字符串长度相等,但是即使是不区分大小写也不能使这两个字符串一致。比如 Beijing 和 Nanjing
编程判断输入的两个字符串之间的关系属于这四类中的哪一类,给出所属的类的编号。
易错:一定要区分3和4,不注意会将4误判成3,所以写代码一定要严谨,加上排除3的前提条件。
#include
#include
int main()
{
char a[2][100];
int i,n,k=0,m;
scanf("%s%s",a[0],a[1]);
for(i=0;a[0][i]!=0;i++)
{
if(strlen(a[0])==strlen(a[1])&&a[0][i]-a[1][i]!=32&&a[1][i]-a[0][i]!=32&&a[1][i]!=a[0][i])
{
printf("4");
return 0;
}
}
if(strlen(a[0])!=strlen(a[1])){printf("1");return 0;}
else if(strcmp(a[0],a[1])==0){printf("2");return 0;}
else {printf("3");return 0;}
}
3.矩阵乘法
给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
例如:
A =
1 2
3 4
A的2次幂
7 10
15 22
强调:矩阵运算中 1.矩阵的0次幂为单位矩阵(对角线全为1,其余全为0)
2.矩阵的1次幂为原矩阵(矩阵本身)
3.矩阵a的m次幂=(a的m-1次幂)*矩阵a
步骤:a的第1行的第一个元素乘以b中第1列的第一个元素,a的第1行的第二个元素乘以b中第1列的第二个元素,结果相加存入c的第1行第1列,a的第1行的第1个元素乘以b中第二列的第1个元素,a的第二行的第二个元素乘以b中第二列的第二个元素,结果相加存入c的第1行第2列.。。。。a[i][k]*b[k][j]结果存入c[i][j]。
a的第i行和b的每一列相乘。
#include
int main()
{
int N,M,i,j,k,p,n=0;
long long c[50][50],a[50][50],b[50][50];
scanf("%d %d",&N,&M);
for(i=0;i
4.矩形交面积
平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。
对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
注意:题中只说明给出相对顶点的坐标,但是并没有明确说是哪两个(左下右上还是左上右下),所以要分多种考虑。给出下面分析:
#include
double min(double a,double b)
{
if(ab)return a;
else return b;
}
int main()
{
double x1,y1,x2,y2,x3,y3,x4,y4,area,a1,a2,b1,b2;
scanf("%lf%lf %lf%lf %lf%lf %lf%lf",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);
a1=max(min(x1,x2),min(x3,x4));
a2=min(max(x1,x2),max(x3,x4));
b1=max(min(y1,y2),min(y3,y4));
b2=min(max(y1,y2),max(y3,y4));
if(a2>a1 && b2>b1)printf("%.2lf",(a2-a1)*(b2-b1));
else printf("0.00");
return 0;
}
5.时间显示
输入一个毫秒值例如
46800999
要求输出
13:00:00
缺位补0
注意:设置时钟时一定要设置当时钟到达24时清零的动作,因为题目中给出的毫秒不一定是在一整天毫秒时间内(24小时->毫秒),可能存在不止一天的情况,但是题目只要求输出一天内的时、分、秒,所以要对时钟进行设置。
#include
int main()
{
int h=0,m=0,s=0,n,i;
scanf("%d",&n);
n/=1000;//转为秒
for(i=0;i
6.门牌制作
小蓝要为一条街的住户制作门牌号。这条街一共有2020位住户,门牌号从1到2020编号。
小蓝制作门牌的方法是先制作0到9这几个数字字符,最后根据需要将字符粘贴到门牌上,
例如门牌1017需要依次粘贴字符1、0、1、7,即需要1个字符0,2个字符1,1个字符7。
请问要制作所有的1到2020号门牌,总共需要多少个字符2?
分析:对数进行分解,从个位、十位、百位....进行提取去判断是否为2,是则被记录,否则不做处理。
#include
int main()
{
int i,j,k=0;
for(i=1;i<2021;i++)
{
j=i;
while(j)
{
if(j%10==2)k++;
j/=10;
}
}
printf("%d",k);
}
在参考其他博主代码的基础上增加了些自己的见解,希望对大家的学习有用。