B1026–程序运行时间
问题注意点
- 四舍五入如何处理,可以使用round函数,也可以直接判断
- 输出格式需要注意
不能使用 %md 这种格式,需要用%0md ,需要再不足两位时使用0占位
AC代码:
#include<cstdio>
using namespace std;
int main()
{
int C1,C2;
scanf("%d%d",&C1,&C2);
int ans=C2-C1;
if(ans%100>=50) ans=ans/100+1;
else ans=ans/100;
int h=ans/3600;//获得时
int m=(ans%3600)/60;//获得分
int s=ans%60;//获得秒
printf("%02d:%02d:%02d\n",h,m,s);
}
收获与思考
- 求模运算获得第M位数字
B1008–数组元素循环右移问题
问题注意点
这道题目需要关注的问题是不能使用新的数组,但是其实也不需要使用新的数组,根据问题的要求仅仅需要将移位之后的数字按顺序输出就行。
然后是注意一下输出格式控制,有空格
AC代码
#include<cstdio>
using namespace std;
int main()
{
int N,M;
scanf("%d%d",&N,&M);
int a[105];
for(int i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
M%=N;
if(M!=0)
{
for(int i=N-M;i<N;i++)
{
printf("%d ",a[i]);
}
}
else
{
for(int i=N-M;i<N;i++)
{
printf("%d",a[i]);
if(i!=N-1)
{
printf(" ");
}
}
}
for(int i=0;i<N-M;i++)
{
printf("%d",a[i]);
if(i!=N-M-1)
{
printf(" ");
}
}
}
B1012–数字分类
问题注意点
这一道题目主要就是考察对于数字个位的提取(求模),以及各种计算的方式。
关于数字这里有两种解决思路。
第一种:像我下面的方式,先开辟一个数字,全部吸收进来然后在输出,耗费空间。
第二种: 不需要数组,进来一个计算一个,空间耗费小一些(如果N很大的话)
这道题我的AC代码比较冗余
#include<cstdio>
using namespace std;
int main()
{
int N;
int a[1005];
scanf("%d",&N);
bool d=true;//用一个bool值来判断是加还是减法
//其实这里还有一种方式,利用count_a2的奇偶性判断,节省一个变量空间(bool变量占1B)
int count=0;
double sum=0;
int count_a2=0;
for(int i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
int A1=0,A2=0,A3=0,A5=0;
double A4=0;
for(int i=0;i<N;i++)
{
int s_d=a[i]%10;
switch(s_d)
{
case 0:
A1+=a[i];
break;
case 1:
case 6:
if(d) A2+=a[i];
else A2-=a[i];
count_a2++;
d=!d;
break;
case 2:
case 7:
A3+=1;
break;
case 3:
case 8:
count++;
sum+=a[i];
break;
case 4:
case 9:
A5=(A5>=a[i]?A5:a[i]);
break;
}
}
A4=sum/count;
//下面就是比较繁琐但是必要的输出格式控制
if(A1!=0) printf("%d ",A1);
else printf("N ");
if(count_a2!=0) printf("%d ",A2);
else printf("N " );
if(A3!=0) printf("%d ",A3);
else printf("N ");
if(count!=0) printf("%.1f ",A4);
else printf("N ");
if(A5!=0) printf("%d",A5);
else printf("N");
}