哎 ,昨晚懒得没写,今天更两个吧。啊,前天晚上也没写。。。。
先写这个,直接抛出问题,给出一个区间,然后在这个区间中找出各位之和是一个给定的K的所有的数,可以给这些数奇数或者给这些数求和,排序,最重要的是找出这些数;
//////////////////////////////////////////////////////////////////////
本题要求实现两个函数:一个函数判断给定正整数的各位数字之和是否等于5;另一个函数统计给定区间内有多少个满足上述要求的整数,并计算这些整数的和。
函数接口定义:
int is( int number );
void count_sum( int a, int b );
函数is
判断number
的各位数字之和是否等于5,是则返回1,否则返回0。
函数count_sum
利用函数is
统计给定区间[a
, b
]内有多少个满足上述要求(即令is
返回1)的整数,并计算这些整数的和。最后按照格式
count = 满足条件的整数个数, sum = 这些整数的和
进行输出。题目保证0<a
≤b
≤10000。
////////////////////////////////////////////////////////////////////////////
(其实这是一道简单题 但是我要补昨天的还要写今天的,就找了一道自己可以快速解决的。)
//拿到这道题呢,可以先分析一下,就是这道题是想干个啥,明显其实就是把它的各位数之和求出来,无论怎么变形,就都快要解决了。
所以相当于我们如何求一个N位数的各位数之和,明显和上次那道求逆序数的有点相似(非常相似),明显就又可以做一个循环,从最后一位加到第一位,每次将最后以为,即以10为模,直到为0。然后由于这是一道函数题所有就需要两个函数,第一个用于判断这个数各位数之和是否为K,另一个函数则表示在一个区间中找到找出所有的满足此条件的数,然后求和,计数(或者进行其他的一些操作)
话不多说,写代码吧;
这里就直接写着两个函数算了;
int is( int number )
{
int s,sum=0;//这两个变量表示的含义是各位数之和,以及每一次的最后一位数
while(number!=0)//在这个循环中,不断的将最后一位数相加
{
s=number%10;
sum+=s;
number=number/10;
}
if(sum==5)
return 1;
else
return 0;
}
另一个函数的作用是将在一个区间中满足这些条件的数加起来
void count_sum( int a, int b )
{ int count=0,t=0;//表示这些数的个数,和加起来的值
for(int i=a;i<=b;i++)
{ if(is(i))//使用上面的is函数进行判断,条件为真是做以下循环
{count++;t+=i;}
printf("%d,%d",count,t);
}
做一个小练习:
//////////////////////////////////////////////////////////////////////////////
输出区间[M,N](10≤M≤N≤1000)之间所有各位数值之和为k的数,并统计输出满足条件的数的个数。
输入格式:
输入在第一行中给出正整数k,第二行中给出2个正整数M和N(10≤M≤N≤1000),中间用空格间隔。
输出格式:
在第一行中输出满足条件的所有数,每个数后面一个空格。
在第二行按count = 总数
的格式输出满足条件的数的个数。
注意:若没有满足条件的数,则第一行为空行
///////////////////////////////////////////////////////////////////////////////
include
#include<stdio.h>
int main()
{
int k,m,n;
int s=0,sum=0,count=0;
scanf("%d %d %d",&k,&m,&n);
for(int i=m;i<=n;i++)
{
while(i)
{
s=i%10;
sum+=s;
i=i/10;
}
if(s==k)
{
printf("%d",i);
count++;
}
}
printf("%d",count);
return 0;
}
(有点仓促)