东方博宜 1450. 数字之和为x的整数
这道题踩的坑也是比较多的啊。。。
思路:
1 读入两排数,这里我想严格按照要求来,所以用到了两种输出方式。
2 将读取的数存放到数组中,这里我之前犯了一个错,我定义了一个数组a[10005] ,然后又定义了一个整数a,我以为他们两个是不一样的,但是后面报错了。定义了一个数组a[10005] 后, 当后面再出现a,指的也是这个数组。
3 遍历数组中的每个数,并对每个数进行拆位运算,这里的while循环我用了很多次了,要注意,这里新定义了一个变量m来存每个遍历的数,m是等于a[i] 的,我总是让m=i ,就报错了。
4 符合条件的数存到新的数组d中去。
5新学了sort排序函数,在头文件里面。sort(d,d+j) 表示给谁排序,排序的长度写的 d 的个数 j 。
#include<iostream>
#include<cstdio> // scanf 在的头文件
#include<algorithm> // sort排序函数在的头文件
using namespace std;
int main()
{
int x , n ;
scanf("%d %d \n" , &x , &n) ; //这是为了满足题意,输入两个数就换行
int a[10005] ; // 定义的数组比要输入的数大一些
for(int i = 0 ; i < n ; i++)
{
cin >> a[i] ; // 读入要判断的数
}
int cnt , zsum ;
cnt = 0 ;
zsum = 0 ;
int d[10005];
int j ;
j = 0 ;
for(int i = 0 ; i < n ; i++)
{
int m , q ,sum ;
m = a[i] ;
sum = 0 ;
while(m > 0) // 对每个数挨个遍历,求和
{
q = m % 10 ;
sum += q ;
m = m / 10 ;
}
if(sum == x)
{
cnt += 1;
zsum += a[i] ;
d[j] = a[i] ; //将符合条件的数存到新的数组中
j++;
}
}
cout << zsum << " "<< cnt << endl ;
sort(d,d+j); //c++中的排序函数,d指的是数组,j指的是数组的个数
for(int i = 0 ; i < j ; i++)
{
cout << d[i] << " ";
}
return 0 ;
}