这是第一次在cdsn上发表东西,主要是想能把自己写过的代码保存下来,初来乍到希望看到的大神们对我的某些见解多多包涵,毕竟我只是一个半程序猿嘻嘻。
这次写的程序主要是因为一道概率论的题目,然后题目是这样的:
做这道题其实思路就是求它的逆事件,也就是说我要知道1~2000中能被6整除又能被8整除的数的个数,以及需要求出能同时被6和8整除的数字数目。1到2000唉手算是不可能的,于是想到用编程计算:
这是初始的代码:
#include "stdio.h"
void main()
{
int i,j,j1,k,k1,r;
j=6;//j和j1为除数
j1=8;
k=k1=r=0;//k和k1为计算完后的余数,余数为零说明能被整除;r是能被整除热个数
for(i=1;i<=2000;i++)//2000为最大的被除数
{
k=i%j;
k1=i%j1;
if(k=0&&k1=0)
{
r++;
}
}
printf("%d",r);
}
后来突然想到要是除数是多个并且需要定义的怎么办?
于是有了下面的代码:
#include "stdio.h"
//因为想到以后可能需要搬用,所以做成了子函数;
void divide(int i1)//i1为除数个数。
{
int i,j,h;
int a[10], k[100][100],r[11];
//因为基本的题目不会太大,所以不管一维的数组还是二维的都没有取很大,
//对于除数很多,被除数很大的情况,可以对上述的数组作更改;
//a为除数值,k为除法后求余取值,用来判断能否整除,r为能被整除的数目个数
for (i=1;i<=i1;i++) //输入除数值
{
printf("请输入第%d个除数:\n",i);
scanf("%d", &a[i]);
}
printf("请输入被除数:\n"); //输入最大被除数值
scanf("%d", &h);
//
for (i=1;i<=i1;i++) //对结果清零
{
r[i]=0;
}
for(j=1;j<=i1;j++) //循环除数个次,括号里面对单个除数个数求值
{
for(i=1;i<=h;i++) //有多少个
{
k[i][j]=i%a[j]; //存储余数,j为第几个除数
//下面一行其实是用来调试的,可以不要
//printf("被除数为%d,除数为%d,\n第%d个余数为%d\n",i,a[j],i,k[i][j]);
if (k[i][j]==0) //判断余数是否为零,为零则个数加一
{
r[j]++;
//printf("%d\n",r[j]);
}
}
}
for(i=1;i<=i1;i++)
{
printf("能被%d整除的数的个数为%d\n", a[i], r[i]);
}
a[0]=r[0]=0;
for(j=1;j<=h;j++)
{
for(i=1;i<=i1;i++)
{
//printf("%d",k[i][j]);
if(k[j][i]==0)
{
a[0]++;
}
}
if(a[0]==i1)
{
r[0]++;
}
a[0]=0;
printf("\n");
}
printf("能同时被所有除数整除的数的数目为:%d\n",r[0]);
}
void main()
{
int i1;
printf("请输入除数个数:\n");
scanf("%d", &i1);
divide(i1);
}
希望你们可以看得懂,因为自己刚打出来的所以有些变量没有用英文的来表示而是直接用随意的字母代替,但是都会有标记,如果说有不懂的地方可以留言嘻嘻。
如果有大佬看到觉得程序还有哪里需要改进的地方希望能够告诉我,我会加油赶上大佬的步伐的!