无你想你 2022-03-10 23:16 采纳率: 0%
浏览 42

蓝桥杯真题之门牌制作

 

 

 

 

我自己敲的,但是不知道为啥还是差很多?,各位能帮我看一下吗?

#include<stdio.h>
#define N 2021
int main()
{
  // 请在此输入您的代码
  //我的想法在于,只需要知道有多少个字符串,那么就可以根据循环判断每一个位置上是否有相应的一个数值
  //"2",根据有多少个2进行累加
  //对于有多个数值的2来说,可以再进行一次判断
  char number;
  int count=0,i;
  for(i=1;i<N;i++)
  {
    if((i/1000==2)||(i/100%10==2)||(i/10%100==2)||(i%10==2))//先对灭一个位置当中是否有2进行判断
    count++;
    if((i/1000==2)&&(i/10%100==2))//判断在不同位置上是否有相同的2,(该判断语句下是判断是否有两个2)
    count++;
    if((i/1000==2)&&(i%10==2))//前两个是在千位上是2进行判断
    count++;
    if((i/100%10==2)&&(i/10%100==2))//因为千位和百位不能同时为2,则少掉一种if判断
    count++;
    if((i/100%10==2)&&(i%10==2))//这里是,假设百十个都是2时已经进行了计算
    count++;
    if((i/10%100==2)&&(i%10==2)&&(i/100%10!=2))//判断只有在个位和十位同时为2时进行计算
    count++;
  }
  printf("%d",count);
  return 0;
}

 这是别人的参考代码,属实是佩服

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int count=0;
  for(int i=1;i<=2020;i++)
  {
    for(int j=i;j>0;j=j/10)
    {
      if(j%10==2)
      {
      count++;
      }
    }
  }
  printf("%d",count);
  // 请在此输入您的代码
  return 0;
}
  • 写回答

2条回答 默认 最新

  • dmm128073411 2023-01-02 17:30
    关注

    说一下参考代码的思路(不知道你有没有看懂)

    我们可以遍历1-2000这些数字,而关键在于怎样快速判断每一个数字有几个2;
    那就可以想到用求余的办法;
    比如2,如果2%2=0(这是个位),则count++,因为2/10=0(int类型)退出循环;
    又比如23,23%2 !=0(这是个位),则continue,再算十位,23/10 = 2,2%2=0,则count++,因为2/10=0(int类型)退出循环;
    这样算就比你那样判断更快

    评论

报告相同问题?

问题事件

  • 创建了问题 3月10日

悬赏问题

  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥20 spring boot集成mqtt的使用问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥30 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入
  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错