第一天开始做先从最简单的开始吧,先挑选了牛客网通过率50%以上的几道题做了做,发现其中有很多坑,大体思路可以想到,但是个别情况会漏掉。
4047 个位数的统计
✨需要注意的一点就是 输入的整数位数过于长,所以不能用int来存储,我直接选用了字符串来储存
✨注意输出格式,不要画蛇添足
#include<iostream>
using namespace std;
int main(){
string number;
int b = 0;
int a[10] = {0};
cin>>number;
for(int i = 0;i<number.length();i++){
char c = number[i];
b = c-'0';
a[b]++;
}
for(int i=0;i<10;i++){
if(a[i]!=0){
cout<< i << ":" << a[i]<<endl;
}
}
}
4048 D进制的A+B (20)
#include<iostream>
#include<cstring>
using namespace std;
char bin[500];
int len;
void T2B(int T,int BC)
{
memset(bin,0,sizeof(bin));
len = 0;
int shang = 0;
while(T>=1)
{
shang = T % BC;
T /= BC;
bin[len++] = 48 + shang;
}
//计算完之后要进行翻转
}
int rev(){
for(int i= 499;i>=0;i--){
if(bin[i]!=0){
return i;
}
}
}
int main(){
int a,b,d,sum;
cin>>a>>b>>d;
sum = a+b;
T2B(sum,d);
int kk =rev() ;//rev的作用是得到第一个不为0的坐标
for(int i = kk;i>=0;i--){
cout<<bin[i];
}
}
✨转换为任意进制的代码是直接去搜的,可以作为模板记下来,但是里面有一个反转的自带函数,在codeblocks里运行正常,但是在牛客网里面却是识别不出来,所以自己写了一遍
4049组个最小数 (20)
✨ 最有难度的地方应该就是理解题意,给出的实例的意思是:
这样就好看多了,就是0有2个,1有2个,2有0个……
#include<iostream>
using namespace std;
//本题的输入是对应的数字的个数
int main(){
int a[10] ;
int k = 0;
int sum =0;
int j =1;
for(int i=0;i<10;i++){
cin>>a[i];
sum = sum+a[i];
}
for(int i=1;i<10;i++){
if(a[i]!=0){
k=i;
a[i]--;
break;
}
}
int b[sum];
b[0] = k;
for(int i = 0;i<10;i++){
while(a[i]>0){
b[j] = i;
j++;
a[i]--;
}
}
for(int i = 0;i<sum;i++){
cout<<b[i];
}
}
4052 程序运行时间(15)
✨ 注意要进行四舍五入的除法,我采取的办法是因为我们需要的是除以100之后的数字,所以只需要判断取余100的余数是否大于50,若大于50则进位,否则不进位。
✨输出的格式,如果是个位数的话,需要在前面加上0 ,
如9要变成–> 09
#include<iostream>
using namespace std;
int main(){
int c1;
int c2;
int cha ;
int s1;
cin>>c1>>c2;
cha = (c2 - c1);
s1 = cha%100;
cha = cha/100;
if(s1>=50){
cha = cha+1;
}
int h = cha/3600;
cha = cha%3600;
int m = cha/60;
cha = cha%60;
int s = cha;
if(h<10){
cout<<"0"<<h<<":";
}else{
cout<<h<<":";
}
if(m<10){
cout<<"0"<<m<<":";
}else{
cout<<m<<":";
}
if(s<10){
cout<<"0"<<s;
}else{
cout<<s;
}
}
继续加油鸭!!!!