蓝桥杯c/c++ c组刷题记录
文章目录
一、题目
1.门牌制作
巧妙用j去除位数
2.成绩统计
输入一个数测试一个数,把整数四舍五入
//先将整数乘以100,再讲要除的数强制float
printf("%.f%%\n",(a*100)/(n*1.0));
printf("%.f%%",(b*100)/(n*1.0));
3.购物清清单
依次输入价格和折扣并求和
4.数字三角形
从上往下加,先判断左下角和右下角的数哪个大,然后选这个数并加上本身的
数
5.卡片
对我来说又是道很难的题,因为拿卡片组成数字首先消耗最小的,所以1会是先
用完的
6.跑步锻炼
1.先将12个月的每个月的天数初始化
2.判断是不是闰年(能被4整除但是不能被100整除 || 能被400整除)
3.定义ans为6当自增到0重新回到1
二、代码块
1.门牌制作
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int cnt;
for(int i = 1;i<=2020;i++)
{
for(int j = i;j>0;j/=10) //去除一位
{
if(j%10==2)//判断最=后一位是不是2
{
cnt++;
}
}
}
printf("%d",cnt);
return 0;
}
2.成绩统计
#include <iostream>
using namespace std;
int main()
{
// 请在此输入您的代码
int n;
scanf("%d",&n);
int a= 0;
int b = 0;
int arr[100001];
for(int i = 0;i<n;i++)
{
scanf("%d",&arr[i]);
if(arr[i]>=60)
{
a++;
}
if(arr[i]>=85)
{
b++;
}
}
printf("%.f%%\n",(a*100)/(n*1.0));
printf("%.f%%",(b*100)/(n*1.0));
return 0;
}
3.购物清单
#include <iostream>
using namespace std;
int main()
{
// 请在此输入您的代码
//暴力 把价格和折扣输入
double sum = 0;
float s= 0;
float jiage,zhekou;
while((scanf("%f %f",&jiage,&zhekou))!=EOF)
{
s = jiage*zhekou;
sum+=s;
}
printf("%lf",sum);
return 0;
}
4.数字三角形
#include <stdio.h>
#include <stdlib.h>
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int a[105][105];//模拟表格
int f[105][105];//储存路线值
int n;
scanf("%d",&n);
for(int i = 1;i<=n;i++)
{
for(int j = 1;j<=i;j++)
{
scanf("%d",&a[i][j]);
}
}
f[1][1] = a[1][1];//把开头第一个数给f数组,从第二行开始算就比较可
//以直接进去
for(int i = 2;i<=n;i++)//从第二行开始
{
for(int j = 1;j<=i;j++)
{
if(j ==1) f[i][j] = f[i-1][j] +a[i][j];//左边
else if(i == j) f[i][j] = f[i-1][j-1]+a[i][j] ;//右边
else f[i][j] = max(f[i-1][j],f[i-1][j-1])+a[i][j];
}
}
//如果n为奇数就会走到第n/2+1的位置也就是中间的数
//如果n为偶数就会走搭中间两个中最大的数
if(n%2==1) printf("%d",f[n][n/2+1]);//奇数情况下
else printf("%d",max(f[n][n/2],f[n][n/2+1]));
return 0;
}
5.卡片
#include<stdio.h>
int main()
{
int a= 0;//定义a变量存储要判定的数
int i,n=0;//定义n判断使用1的次数
for( i = 1;;i++)//从1开始
{
a = i;
while(a>0)
{
if(a%10==1)//判断有没有使用1
n++;
a/=10;//去除一位
}
if(n>=2021)//如果使用次数大于2021次就退出循环
{
break;
}
}
printf("%d",i);
return 0;
}
6.跑步锻炼
#include<stdio.h>//依次判断年月日周
int main(){
int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int year,month,day;
int ans=6;//一月一号是周六
int cnt=0;//公里数
for(year=2000;year<=2020;year++){
if(year%4==0&&year%100!=0||year%400==0){
months[2]=29;
}else{
months[2]=28;
}
for(month=1;month<=12;month++){//几月
for(day=1;day<=months[month];day++){//几日
cnt++;//每天一千米
if(ans==8){
ans=1;//ans自增到 8 时归回 1
}
if(ans==1||day==1){//或意味着A对,B对,AB同时对三种情况
cnt++;//周一或月初或周一与月初多跑一千米
}
ans++;//进入第二天
if(year==2020&&month==10&&day==1){//到2020.10.1结束循环
printf("%d",cnt);
}
}
}
}
return 0;//一点一点来不要怕错
}
总结
有不对的地方还请大佬指点