不知道能带什么标题的问题之二

为什么跑不起来呢大家

img


#include<stdio.h>

int main(viod)
{
    int L,R;
    int i,n;
    int m,k;
    m=0;
    k=0;
    
    scanf("%d %d",&L,&R);
    
    for(i=L,n=0;i<=R;i++)
    {
        if(i>=10)
        {
           m=i%10;
           k=i/10;
        }
        else
        m=i;
        n=(m==2)+(k==2);
        m=0;
        k=0;
    }

    printf("%d",n);

    return 0;    
} 
这是之前的,能算,但是感觉写得不够简洁,所以又写了一遍,但是后面写的那次算不对了

#include<stdio.h>
#include<string.h>
int main(viod)
{
    int L,R;
    int i,j,emerge_n;
    int n[200000]={0};
    
    scanf("%d %d",&L,&R);
    
    for(i=L,j=0;i<=R;i++)
    {
        if(i>=10)
        {
            n[j]=i%10;
            j++;
            n[j]=i/10;
        }
        else
        n[j]=i;
        ++j;
    }
    
        for(i=0,emerge_n=0;i<=j;i++)
        {
           if(n[i]==2)    
           emerge_n++;  
           else continue;
        }

    printf("%d",emerge_n);

    return 0;    
} 

int geshu(int n){
     int sum=0;
     while(n){
            if(n%10==2)  sum++;
            n/=10;
     }
     return sum;
}

修改后的代码:

#include <stdio.h>

int main() {
    int L, R;
    int i, n;
    int m, k;
    m = 0;
    k = 0;
    n = 0;
    scanf("%d %d", &L, &R);
    for (i = L; i <= R; i++) {
        if (i >= 10) {
            m = i % 10;
            k = i / 10;
        } else {
            m = i;
        }
        n += (m == 2) + (k == 2);
        m = 0;
        k = 0;
    }
    printf("%d", n);
    return 0;
}


#include<stdio.h>

int main()  
{
    int L, R;  
    int n;  
      
    scanf("%d %d", &L, &R);  
      
    for (int i = L; i <= R; i++)  
    {  
        n += (i % 2 == 0) + (i / 2 == 0);  
    }  
      
    printf("%d", n);  
      
    return 0;  
}
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/269906
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:轻松解决三种二叉树的最大路径和问题
  • 除此之外, 这篇博客: 嵌入式课程 之 超声波传感器实验中的 第二步 编写定时器函数,完成定时器的配置和启用 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 打开程序中的timer.c文件,首先将timer.h文件包含进来。其次对TIM3_Cap_Init 函数进行编写,选择要使用的时钟,输入捕获的引脚及其参数,并初始化定时器中断。

    #include "timer.h"
    /****************************************************************
    函数功能:定时器3通道3输入捕获初始化
    入口参数:arr::自动重载值  psc:时钟预分频数
    返回值:无
    ****************************************************************/
    TIM_ICInitTypeDef  TIM3_ICInitStructure;
    void TIM3_Cap_Init(u16 arr,u16 psc)	
    {	 
        //初始化结构体
    GPIO_InitTypeDef GPIO_InitStructure;
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
    //(1) TIM时钟使能, GPIO 时钟使能
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);	//使能TIM3时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);    //使能GPIO 时钟
    //(2) GPIO 端口模式设置
    GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0; //PBO输入
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;   
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_1;     
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;    
    GPIO_Init(GPIOB, &GPIO_InitStructure);
        //(3)初始化定时器3(TIM3)
    TIM_TimeBaseStructure.TIM_Period = arr;    //设定计数器自动重载值
    TIM_TimeBaseStructure.TIM_Prescaler =psc;    //预分频器
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TimeBaseStructure中指定的参数初始化TIMx的时间基数单位
    
    //(4)初始化TIM3输入捕获参数
    TIM3_ICInitStructure.TIM_Channel = TIM_Channel_3; //CC1S=03选择输入端
    TIM3_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕获
    TIM3_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
    TIM3_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置不分频
    TIM3_ICInitStructure.TIM_ICFilter = 0x00;  //配置输入滤波器,不滤波
    TIM_ICInit(TIM3, &TIM3_ICInitStructure);
    //(5)中断分组初始化
    NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3中断	 
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;   //先占优先级,2级
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  //从优先级,0级
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
    NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器
    //(6) 使能捕获和更新中断
    TIM_ITConfig(TIM3,TIM_IT_Update|TIM_IT_CC3,ENABLE);  //允许更新中断,允许CC3IE捕获中断
    //(7) 使能定时器
    TIM_Cmd(TIM3, ENABLE);   //使能定时器3
    }
    

    编写超声波中断脉宽读取中断函数

    void TIM3_IRQHandler(void)
    { 
    u16 tsr;
    tsr=TIM3->SR;
    if((TIM3CH3_CAPTURE_STA&0X80)==0)  //还未成功捕获
    {
    	if(tsr&0X01)  //溢出
    	{	    
    		if(TIM3CH3_CAPTURE_STA&0X40)  //已经捕获到高电平
    		{
    			if((TIM3CH3_CAPTURE_STA&0X3F)==0X3F) //高电平过长
    			{
    				TIM3CH3_CAPTURE_STA|=0X80; //标记成功捕获一次
    				TIM3CH3_CAPTURE_VAL=0XFFFF;
    			}else 
    TIM3CH3_CAPTURE_STA++;
    		}	 
    	}
    if(tsr&0x08)  //发生捕获事件
    {	
    if(TIM3CH3_CAPTURE_STA&0X40)	  //捕获到一个下降沿	
    {	  			
    TIM3CH3_CAPTURE_STA|=0X80; //标记成功捕获一次高电平脉宽
    TIM3CH3_CAPTURE_VAL=TIM3->CCR3; //获取当前的捕获值
    TIM3->CCER&=~(1<<9);  //CC1P=0 设置为上升沿捕获
    }
    else       //第一次捕获到上升沿
    {
    TIM3CH3_CAPTURE_STA=0;  //清空
    TIM3CH3_CAPTURE_VAL=0;
    TIM3CH3_CAPTURE_STA|=0X40;  //标记捕获到了上升沿	
    TIM3->CNT=0;	     //计数器清空
    TIM3->CCER|=1<<9; 	  //CC1P=1 设置为下降沿捕获
    }		    
    }			     	    					   
    }
    TIM3->SR=0;  //清除中断标志位
    }
    

    (5)编写超声波接受回波函数,计算距离

    /*************************************************************
    函数功能:超声波接收回波函数
    入口参数: 无
    返回值: 无
    *************************************************************/
    // TIM3CH3_CAPTURE_STA与TIM3CH3_CAPTURE_VAL; 为定时器库里预定义变量,分别指代TIM3通道3的捕获状态寄存器和计时器捕获时间寄存器
    void Read_Distane(void)
    {   
    	PBout(1)=1;
    	delay_us(15);  
    	PBout(1)=0;	
    	if(TIM3CH3_CAPTURE_STA&0X80)  //成功捕获到一次高电平
    	{
    		Distance=TIM3CH3_CAPTURE_STA&0X3F;
    		Distance*=65536;				  //溢出时间总和
    		Distance+=TIM3CH3_CAPTURE_VAL;	  //得到总的高电平时间
    		Distance=Distance*170/1000;
    		TIM3CH3_CAPTURE_STA=0;	  //开启下一次捕获
    	}
    }
    

    (6)打开timer.h,编写函数声明

    #ifndef __TIMER_H
    #define __TIMER_H
    #include <sys.h>	 
    void TIM3_Cap_Init(u16 arr,u16 psc);
    void Read_Distane(void);
    void TIM3_IRQHandler(void);
    #endif
    
  • 您还可以看一下 王西猛老师的商超收银软件中的扫码识别商品编程解析课程中的 扫描枪扫码识别解析概述小节, 巩固相关知识点

第二种写法,修改如下,供参考:

#include<stdio.h>
int main()
{
    int L, R;
    int i, j, emerge_n;
    int n[10] = { 0 };
    scanf("%d %d", &L, &R);
    for (i = L, j = 0; i <= R; i++)
    {
        if (i >= 10)
        {
            emerge_n = i;
            while (emerge_n) {
                n[emerge_n % 10]++;
                emerge_n /= 10;
            }
        }
        else
            n[i]++;
    }
    //for (i = 0, emerge_n = 0; i <= j; i++)
    //{
    //    if (n[i] == 2)
    //        emerge_n++;
    //    else continue;
    //}
    printf("%d", n[2]);
    return 0;
}