您的位置:首页 > 编程语言 > C语言/C++

蓝桥杯精选:数的统计,阿尔法乘积,寂寞的数

2017-01-08 23:02 225 查看
START

数的统计:



这道题是较简单,但同时也极具代表的一道题!

不多说先上代码~

#include "stdio.h"
int find(int *arr,int l,int n) //返回出现次数的函数
{
int i=0,k=0;
for(i=0;i<l;i++)
if(arr[i]==n) k++;
return k;
}
void sort(int *p,int n) //排序函数
{
int q,i,j;
for(j=0;j<n;j++)
for(i=0;i<n-j-1;i++)
if(*(p+i)>*(p+1+i)){
q=*(p+i);
*(p+i)=*(p+i+1);
*(p+i+1)=q;
}
}
int main()
{
int n,i,j,a[1000];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,n);
printf("%d %d\n",a[0],find(a,n,a[0])); //数组首位单独输出
for(i=1;i<n;i++)
if(a[i]!=a[i-1]) //一个数字及其出现次数只需输出一次
printf("%d %d\n",a[i],find(a,n,a[i]));
return 0;
}

该题大概思路就是先将数组排序(可以写个函数),然后输出,再写一个函数返回重复的次数(遍历数组),要注意的是首位要单独输出,因为下面的循环是从a[1]开始数。

阿尔法乘积:



这题较为坑的地方在于输入的数可能远超int 的范围,所以可以采用数组来存储输入的数的方法,也可以使用long long int 的方法。

但这题我觉得利用递归是最简单的方法。

#include "stdio.h"
int alpha(long long int n)
{
if(n<10){
return n; //递归先设置出口(小于10的情况)
}else{
long long int a=1;
while(n){
if(n%10!=0){
a*=n%10;
n/=10;
}else n/=10;
}
return alpha(a); //若大于10 则递归
}
}
int main()
{
long long int n;
scanf("%I64d",&n);
printf("%d",alpha(n));
return 0;
}

寂寞的数:



关于这个“生成元”的概念,要记住生成元一定大于原本的数就够,这道题的思路就是把每个数的生成元求出来,然后再对比原数,一一对比,若原数没有对应的生成元,就是所谓的“寂寞的数”

#include "stdio.h"
int sum(int i){ //求各个位数的和的函数
if(i > 9)
return i%10 + sum(i/10);
else
return i;

}
int main()
{
int n,i,j,a[10000],b[10000]={0}; //a数组用来存放生成元,b数组来标记那些非寂寞的数
scanf("%d",&n);
for(i=0;i<n;i++)
a[i]=i+sum(i);

for(i=0;i<n;i++){
for(j=0;j<n;j++)
if(i==a[j])
b[i]=1;
}

for(i=0;i<n;i++)
if(b[i]!=1)
printf("%d\n",i);
return 0;
}

这三道题都是蓝桥杯中较简单,适合新手拿来练手上门的习题。

END
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  蓝桥杯 C语言