求助c语言编程题目Alice and Bob

主要是题目描述不知道该怎么思考,看了半天,感觉还是一头雾水,然后网上搜的内容也没看懂。。。(孩子枯了T﹏T)
求大佬们帮忙解答(主要是解题思路!)
万分感谢!!!(对了对了,我是大一新生,所以很多东西可能还不是太懂,希望能讲得通俗易懂些。。。)

alice喜欢的是n位数,我们可以取所有不大于n位数的非负整数作为集合A;把小于n位数的非负整数作为集合B。
那么我们知道alice喜欢的数是集合A中的数去除集合B中的数。A-B.
比如alice喜欢的三位数,那么最大的三位数是999,集合A就是从0到999,而集合B就是0到99。
比如alice喜欢一位数,那么最大一位数是9,集合A为0到9,集合B为空集

事情就变得很简单了。
在集合A中bob喜欢的数个数一共有,集合A中最大的数对m的整除并加1,得到结果 a。
在集合B中bob喜欢的数个数一共有,集合B中最大的数对m的整除并加1,得到结果b。
举例:alice喜欢三位数,bob是整除3的数。那么A={0...999}, B={0...99}
因此 a = 999/3 + 1 = 334, b=99/3+1=34。
因此alice,bob都喜欢的数个数为 a-b=334-34= 300.
再举例:alice喜欢三位数,bob是整除2的数。那么A={0...999}, B={0...99}
因此 a = 999/2 + 1 = 500, b=99/2+1=50。
因此alice,bob都喜欢的数个数为 a-b=500-50= 450.
再举例:alice喜欢一位数,bob是整除2的数。那么A={0...9}, B=空集
因此 a = 9/2 + 1 = 5, b=0,这里B是空集,如果你理解之前为什么加1就能理解b=0。
每次a,b求值运算都有一个加1,是因为集合包含元素0,而0能被任何整数整除。
这里由于集合B是空集,不包含任何元素,因此集合B中能被2整除的数据个数必定是0,因此 b= 0,
所以alice,bob都喜欢的数个数为 a-b=5 - 0 = 5.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-10-21
比如:
1 2
就是n=1,m=2,

就是:能被2整除的1位数有多少个?0 2 4 6 8,一共5个。
3 2
就是n=3,m=2、

要找出能被2整除的3位数有多少个,算出来是450个,就输出450
主要思路:
有几组输入,就循环几次。
对于每一组输入,根据n确定查找起止点,逐个去除m,看看能否整除。然后统计能整除的个数,记录下来。
代码就不写了吧。如果需要请追问,若不需要望采纳,感谢。
----------------------
#include <stdio.h>
#include <math.h>
int main(void ) {
int i,j,num=0,count=0,begin=0;
int nm[10000][2];
scanf("%d",&num);
for(i=0;i<num;i++){
scanf("%d%d",&nm[i][0], &nm[i][1]);
}
printf("\n\n");
for(i=0;i<num;i++){
count=0;
begin=nm[i][0]==1?0:pow(10,nm[i][0]-1);
for(j=begin;j<pow(10,nm[i][0]);j++){
if(j%nm[i][1]==0){
count++;
}
}
printf("%d\n",count);
}
return 0;
}追问

学长你好,你讲的我是看懂了,可是我的问题主要就是不知道怎么算。。。

数学不好的卑微

T﹏T

然后用程序将其表达出来能力也有所欠缺

追答

算什么?一个数能否被m整除吗?
不用数学,让代码循环,一个一个地除。
比如 n=3,m=2
起止点就是100~999,就是10²~10³-1
for(int i=pow(10,n);i<pow(10,3)+1;i++){

if(i%m==0){count++;}
}

追问

。。。。

能在线求个代码吗

感觉还是不太懂怎么表达

追答

你采纳一下,我写好后在最初的回答里面修改。

追问

哦哦可以

主要是那个pow函数啥的我们都还没学

我是看得一脸懵逼,更别说写出来了

其实就是太菜了T﹏T

先谢谢学长啦

追答

改好了。pow(3,2)就是3的2次方

本回答被提问者采纳
相似回答