求用c语言编写一个程序,求10000以内含有数字4的数的个数

如题所述

这是数学问题,相当于排列组合问题。
求N个数字以内的含有M的方法,对于以上问题即求4个数字(9999)以内含有4的个数。
千位为"4"的个数是10*10*10;
百位、十位、个位为"4"的个数也是10*10*10;
所以10000以为的个数为4000个,公式为:N*pow(10, N-1);
但是这里面有重复,例如"4444"都满足上面4个,即个数计算了4次,类似这样的有*444 4*44 44*4 444* **44等有两个或者两个以上4的数字,有几个4数字就表示重复了几次、所以还得减去N的4数字(重复了N次,所以应该减去N-1个)、(N-1)个4数字(重复了N-1次,应该减去(N-2)个)等等。
那么就应该减去1+2+...+N-2+N-1的个数,即N(N-1)/2个
所以公式为N*pow(10, N-1)-N*(N-1)/2
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-10-06
main()
{
int i;
int a1,a2,a3,a4,a5;
int cnt1,cnt2,cnt3,cnt4,cnt;
for(i=1;i<10;i++)
if(i==4)
cnt1++;
for(i=10;i<100;i++)
{a1=i/10;
a2=i%10;
if(a1==4||a2==4)
cnt2++;}
for(i=100;i<1000;i++)
{a1=i/100;
a2=i%100/10;
a3=i%1000%100%10;
if(a1==4||a2==4||a3==4)
cnt3++;}
for(i=1000;i<9999;i++)
{a1=i/1000;
a2=i%1000/100;
a3=i%1000%100/10;
a4=i%1000%100%10;
if(a1==4||a2==4||a3==4||a4==4)
cnt4++;}
cnt=cnt1+cnt2+cnt3+cnt4;
printf("%d",cnt);
}

没有经过调试,算法应该没有错误,如果有错的地方,请指正。本回答被提问者采纳
第2个回答  2008-03-23
#include <stdio.h>
bool ishave( int n )
{
if( n/1000 == 4 )
{
return true;
}
else
{
n = n%1000;
if( n/100 == 4 )
{
return true;
}
else
{
n = n%100;
if( n/10 == 4 )
{
return true;
}
else
{
n = n%10;
if( n == 4 )
{
return true;
}
return false;
}
}
}
}

int main()
{
int i = 0;
int num = 0;
while( i<1000 )
{
if( ishave( i++ ) )
{
num++;
}
}
printf("%d",num);
}
第3个回答  2020-02-20
main()
{
int
i;
int
a1,a2,a3,a4,a5;
int
cnt1,cnt2,cnt3,cnt4,cnt;
for(i=1;i<10;i++)
if(i==4)
cnt1++;
for(i=10;i<100;i++)
{a1=i/10;
a2=i%10;
if(a1==4||a2==4)
cnt2++;}
for(i=100;i<1000;i++)
{a1=i/100;
a2=i%100/10;
a3=i%1000%100%10;
if(a1==4||a2==4||a3==4)
cnt3++;}
for(i=1000;i<9999;i++)
{a1=i/1000;
a2=i%1000/100;
a3=i%1000%100/10;
a4=i%1000%100%10;
if(a1==4||a2==4||a3==4||a4==4)
cnt4++;}
cnt=cnt1+cnt2+cnt3+cnt4;
printf("%d",cnt);
}
没有经过调试,算法应该没有错误,如果有错的地方,请指正。

求用c语言编写一个程序,求10000以内含有数字4的数的个数
百位、十位、个位为"4"的个数也是10*10*10;所以10000以为的个数为4000个,公式为:N*pow(10, N-1);但是这里面有重复,例如"4444"都满足上面4个,即个数计算了4次,类似这样的有*444 4*44 44*4 444* **44等有两个或者两个以上4的数字,有几个4数字就表示重复了几次、所以还得减去N...

用c语言统计1000-9999之间的所有满足以下条件的四位数的个数?
结果如图。

如何用c语言算出一个数中由几个数字组成,例如12314由4个数字组成?
if(x<0){ --n; } printf("#您输入的数由%d个数字组成。\\r\\n", n);system("pause");} 或者就是将这个数不断除10,直到成为0为止,计算位数。{ int n = 1;while(x){ x\/=10;++n;} \/\/n就是位数。}

c语言作业:输入一个四位正整数,编程求出其四个数字并输出。(提示:利用...
include "stdio.h"int main(int argc,char *argv[]){int n,t,k;printf("Please enter a positive integer of 4 digits...\\nn=");if(scanf("%d",&n)!=1 || n<1000 || n>9999){printf("Input error, exit...\\n");return 0;}for(k=1,t=n;t;t\/=10,k*=10);printf("\\n...

...出四个不同的数字,注意,四个数字不能相同。用C语言实现
int fun(int a,int b,int c,int d)\/\/判断所得的四个数是否相等,全都不等为正确 { if((a!=b)&&(a!=c)&&(a!=c)&&(a!=d))if((b!=c)&&(b!=d))if(c!=d)return 1;return 0;} void main(){ int a,b,c,d;srand((unsigned)time(0));a=1+rand()%1000;b=1+rand(...

求助各位大神C语言基础考试编写一个程序,输入任意一个4位整数分别输出...
include <stdio.h>int main(void) {int n;for(scanf("%d",&n);n;n\/=10){printf("%d\\n",n%10);}return 0;}#include <stdio.h>int main(void) {int n,i,t;for(i=100;i<1000;++i){for(t=i,n=0;t;t\/=10){n+=(t%10)*(t%10)*(t%10);}if(n==i){printf("%d\\n...

用C语言编写一个程序,输入一个整数,输出0~9各数字在该整数中出现的次数...
include<stdlib.h> include<string.h> int main(){ int a[10];\/\/每个数字的计数器 int num;int i;char ch[100],*ch1,num1;for(i = 0;i < 10;i++)a[i] = 0;printf("请输入一个整数:");scanf("%d",&num);itoa(num,ch,10); \/\/将数字转化为字符串 for(ch1 = ch;ch1<...

如何编写程序 写一个函数,输入一个四位数字,要求输出这四个数字字符
int i1,i2,i3,i4;printf("Please enter a data with 4 digits\\n");scanf("%d",&k);i1 = k % 10;k = (k - i1) \/ 10;i2 = k % 10;k = (k - i2) \/ 10;i3 = k % 10;k = (k - i3) \/ 10;i4 = k;printf("%d-%d-%d-%d\\n",i4,i3,i2,i1); \/\/每两个...

用c语言编写程序,输出从小到大的数字。
C语言程序如下:include<stdio.h> intmain(){ inta,b,c,t;printf("请输入三个数:");scanf("%d%d%d",&a,&b,&c);if(a>b){ t=a;a=b;b=t;} if(a>c){ t=a;a=c;c=t;} if(b>c){ t=b;b=c;c=t;} printf("从小到大的顺序是:%d %d %d\\n",a,b,c);return0;} ...

c语言编程 找出10000以内所有的素数(质数),每10个数字一行。
include<stdio.h> int main(){ int i,j,k=0;for(i=2;i<10000;i++){ for(j=2;j*j<=i;j++)if(i%j==0)break;if(j*j>i){ printf("%d ",i);k++;if(k%10==0)printf("\\n");} } }

相似回答