算法竞赛入门经典第二章上机以总结

本文提供了一系列C语言编程练习题,包括计算整数位数、找出水仙花数、解决韩信点兵问题等,通过实际操作加深对循环、条件判断及基本数学运算的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//2-1 题目:输入一个不超过10^9的正整数,输出它的位数。
//例如12735的位数是5。请不要使用任何数学函数,只用四则运算和

//循环语句实现

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
    int n,k=0;
	scanf("%d",&n);
	while(n)
	{
	  n/=10;
      k++;
	}
	printf("位数为%d\n",k);
}
//2-2 输出100 ~ 999中的所有水仙花数

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
    int a,b,c,sum;
	for(a=1;a<=9;a++)
	{
		for(b=0;b<=9;b++)
		{
			for(c=0;c<=9;c++)
			{   
				sum=a*100+b*10+c;
				if(a*a*a+b*b*b+c*c*c==sum)
				{
					printf("%d是水仙花数\n",sum);
				}
			}
		}
	}
}

//2-3  韩信点兵(hanxin)

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
   int a,b,c,i;
   scanf("%d%d%d",&a,&b,&c);
   for(i=10;i<=100;i++)
   {
	   if(i%3==a&&i%5==b&&i%7==c)
	   {
		   break;
	   }
   }
   if(i<=100)
   {
	   printf("%d\n",i);
   }
   else
   {
	   printf("No answer\n");
   }
}

//2-6

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
     int n,i;
	 double result=0;
	 scanf("%d",&n);
	 for(i=1;i<=n;i++)
	 {
		 result+=1.0/i;
	 }
	 printf("%.3lf\n",result);
}
//2-7

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
     int n,i;
	 double result=0;
	 int f=1;
	 for(i=1;;i=i+2)
	 {  
		 if(fabs(1.0/i)<1e-6)
		 {
			 break;
		 }
		 result+=(1.0/i)*f;
		 f=-f;
	 }
	 printf("%.3lf\n",result);
}
//2-8

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
     int n,m;
	 int i;
	 double result=0;
	 
	 scanf("%d%d",&n,&m);
    for(i=n;i<=m;i++)
	{
       result+=(1.0/i)*(1.0/i);
	}
	printf("%.5f\n",result);
}
//2-9

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
     int a,b,c,i;
<span style="white-space:pre">	</span> double result=0;
<span style="white-space:pre">	</span> scanf("%d%d%d",&a,&b,&c);
<span style="white-space:pre">	</span> result=a*(1.0/b);
<span style="white-space:pre">	</span> printf("%.*f\n",c,result);
}

//2-10用1,2,3……9组成3个三位数abc,def和ghi,
//每个数字恰好使用一次,要求abc:def:ghi = 1:2:3。输出所有解。
//参考网友的做法,换个角度思考问题
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
	int p[10]={0};
	int i,n,m;
	for(i=100;i<333;i++)
	{
       n=i*2;
	   m=i*3;
	   p[i/100]=1;
	   p[i/10%10]=1;
	   p[i%10]=1;

	   p[n/100]=1;
	   p[n/10%10]=1;
	   p[n%10]=1;

	   p[m/100]=1;
	   p[m/10%10]=1;
	   p[m%10]=1;
	   int k,s=0;
	   for(k=1;k<=9;k++)
	   {
		 if(p[k]==0)
		 {
			 break;
		 }
	   }
	   
	   if(k>9)
	   {
		   printf("该解为%d:%d:%d\n",i,n,m);
	   }
       for(k=1;k<=9;k++)
	   {
		  p[k]=0;
		   
	   }
	   
	}

}

总结:

计时函数的用法

         printf("timeused =%.2lf\n",(double)clock()/CLOCKS_PER_SEC); 

         编程过程中要注意乘法溢出问题!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值