求[a,b]的闭区间内(a和b为正整数),数字“3”出现的次数,例如,在[3,33]中,3,13,23,30,31,32,33中都有数字“3”,共出现7次。编程要求:第一行输入a与b的值,第二行输出结果。
例子:
3 33
7
这个用c语言怎么写
#include <stdio.h>
int main()
{
int a, b, count = 0;
scanf("%d %d", &a, &b);
for(int i = a; i <= b; i++) {
int n = i;
while(n > 0) {
if(n % 10 == 3) {
count++;
}
n /= 10;
}
}
printf("%d", count);
return 0;
}
参考GPT和自己的思路:用C语言可以这样写:
#include<stdio.h>
/*函数:countNumbersInRange
*功能:统计闭区间[a,b]中数字“3”的个数
*参数:a——区间左端点,b——区间右端点
*返回值:数字“3”的个数
*/
int countNumbersInRange(int a, int b)
{
int count = 0; //计数器初始化为0
int i;
for(i = a; i <= b; i++)
{
int j = i;
while(j)
{
if(j % 10 == 3) //如果个位上是数字“3”
{
count++; //计数器加1
break; //跳出当前的while循环,继续for循环
}
j /= 10; //将数字j往右移一位
}
}
return count; //返回数字“3”的个数
}
int main()
{
int a, b;
scanf("%d%d", &a, &b); //先输入闭区间左端点a和右端点b
printf("%d", countNumbersInRange(a, b)); //输出数字“3”的个数
return 0;
}
代码中的countNumbersInRange函数用于统计闭区间[a,b]中数字“3”的个数。
对于每个整数i(从a遍历到b),用while循环逐个分离数字,检查个位上是不是数字“3”;如果是,计数器加1,并跳出当前的while循环,继续下一个整数i的遍历。
最终,countNumbersInRange函数返回数字“3”的个数,这个结果会被main函数输出。
请注意,在输入闭区间左端点a和右端点b之后,程序会直接调用countNumbersInRange函数并输出结果,因此在程序中并没有使用第二行输入输出数据的语句。
不知道你这个问题是否已经解决, 如果还没有解决的话:1.实验代码
#include<stdio.h>
int main()
{
int A,B;
double C;
scanf("%d %d", &A, &B);
C = (double)A / B;
if (B > 0)
printf("%d/%d=%.2f",A,B,C);
if (B < 0)
printf("%d/(%d)=%.2f",A,B,C);
if (B == 0)
printf("%d/%d=Error",A,B);
return 0;
}
2.设计思路
(1)第一步 理解题目 ,知道A/B需要输出三种情况 ,B>0,B<0及B=0
第二步 输出结果需保留两位小数,输入的A,B值均为整数,因此定义两个整数和一个浮点数A,B和C
第三步 打出基本框架
第四步 根据要求定义用if分别写出三种不同情况,输出数值C的算法
第五步 依次输出结果
(2)流程图
3.本题遇到的困难及解决方法
遇到的困难:先定义c的算法,后初始化了,初始化时忘记打&,浮点运用错误。定义c的算法时没打double
解决的方案:流程及编译问题通过自己的观察解决,定义c的算法时打double请教了同学,开始并不知道需要打
4.运行结果