蓝杯三十六
算法训练 数位分离
时间限制:1.0s 内存限制:512.0MB
提交此题
问题描述
编写一个程序,输入一个1000 以内的正整数,然后把这个整数的每一位数字都分离出来,并逐一地显示。
输入格式:输入只有一行,即一个1000以内的正整数。
输出格式:输出只有一行,即该整数的每一位数字,之间用空格隔开。
输入输出样例
样例输入
769
样例输出
7 6 9
#include <stdio.h>
void getResult(int num)
{
//出口
if(num<10)
{
printf("%d ",num);
return ;
}
//递归
getResult(num/10);
printf("%d ",num%10);
}
int main()
{
int n;
scanf("%d",&n);
getResult(n);
printf("\n");
return 0;
}
思路分析:
①定义变量:一个小于1000的整数;
②输入整数;
③调用函数将每个数字分离:如果该数小于10,则输出;如果该数大于10,则用递归将其分离并输出。
算法训练 6-2递归求二进制表示位数
时间限制:10.0s 内存限制:256.0MB
提交此题
问题描述
给定一个十进制整数,返回其对应的二进制数的位数。例如,输入十进制数9,其对应的二进制数是1001,因此位数是4。
样例输入
一个满足题目要求的输入范例。
9
样例输出
9
4
与上面的样例输入对应的输出。
数据规模和约定
输入数据中每一个数的范围。
例:输入在int表示范围内。
#include"stdio.h"
int main()
{
long int n;
int s=0;
scanf("%d",&n);
while(n!=0)
{
s++;
n=n/2;
}
printf("%d\n",s);
return 0;
}
思路分析:
①定义变量:一个十进制整数,位数(初始化为0);
②输入十进制整数;
③循环直至该数为0跳出,位数加1,转变为二进制是该数被2整除;
④输出位数。
算法训练 友好数
时间限制:1.0s 内存限制:256.0MB
提交此题
问题描述
有两个整数,如果每个整数的约数和(除了它本身以外)等于对方,我们就称这对数是友好的。例如:
9的约数和有:1+3=4
4的约数和有:1+2=3
所以9和4不是友好的。
220的约数和有:1 2 4 5 10 11 20 22 44 55 110=284
284的约数和有:1 2 4 71 142=220
所以220和284是友好的。
编写程序,判断两个数是否是友好数。
输入格式
一行,两个整数,由空格分隔
输出格式
如果是友好数,输出"yes",否则输出"no",注意不包含引号。
样例输入
220 284
样例输出
yes
数据规模和约定
两个整数都小于10000
#include "stdio.h"
int fun(int n){
int count=0,i;
for(i=1;i < n;i++){
if(n % i==0){
count+=i;
}
}
return count;
}
int main(){
int num1,num2;
int a,b;
scanf("%d%d",&num1,&num2);
b=fun(num1);
a=fun(num2);
if(a==num1 && b==num2){
printf("yes\n");
}
else{
printf("no\n");
}
return 0;
}
思路分析:
①定义变量:两个整数;
②输入两个整数;
③调用函数:
(1) 定义变量:约数,约数和(初始化为0);
(2)for语句循环(从1开始,循环到该数),用if语句判断该数是否被约数整除余数为0,如果为0,则累加;
(3)返回值为约数和;
④if语句判断是否为友好数,如果是则输出yes,否则则为no。