为什么跑不起来呢大家
#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;
}
打开程序中的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;
}