1、因子和:
描述:
给定一个数N,可以计算该数所有因子(除它本身之外)的和,如12的因子和为16,现给定一个和,
求1~10000之间所有可得到该和的数,按由小到大,一行一个输出。
注:能整除N的数称为N的因子
输入格式:
一个正整数
输出格式:
所有满足题意的数
输入样例:
6
输出样例:
6
25
代码实现(参考):
#include <stdio.h>
int main()
{
int a, h=0;
scanf("%d",&a);
for(int n=1; n<=10000; n++){
for(int j=1; j<n; j++){
if(n % j == 0){
h += j;
}
}
if(h == a){
printf("%d\n", n);
}
h = 0;
}
return 0;
}
2、计算组合数:
描述:
由键盘输入m和n,计算组合数,公式如下:
输入格式:
m与n
输出格式:
组合数
输入样例:
6 2
输出样例:
15
提示:
建议用函数的方法简化代码
代码实现(参考):
#include <stdio.h>
int m,n;
int jiecheng(int x){
int result = 1;
for(int i=1;i<=x;i++){
result *= i;
}
return result;
}
int zuhe(int m,int n){
int result;
result = jiecheng(m)/(jiecheng(m-n)*jiecheng(n));
return result;
}
int main()
{
scanf("%d %d",&m,&n);
printf("%d",zuhe(m,n));
return 0;
}
3、[填空题]最近对问题:
描述:
下列程序,实现由键盘输入n(n<50)个点的坐标x,y(x,y<1000),计算出最近两个点的距离。(保留三位小数) 请填空:
#include "stdio.h"
#include "math.h"
int d(int x,int y,int m,int n){
int i,j;
i=x-m;
j=y-n;
return _______________________;
}
int main()
{
int i,j;
int x[50],y[50];
float ff;
int m,_______________________,n;
scanf("%d",&i);
j=0;
while(j<i)
{
scanf("%d%d",&x[j],&y[j]);
_______________________;
}
for(j=0;j<i;j++)
{
for(m=j+1;m<i;m++)
if(min==0||d(x[j],y[j],x[m],y[m])<min)
min=_______________________;
}
ff=sqrt(min);
printf("%.3f",ff);
}
输入样例:
3 0 0 1 2 2 2
输出样例:
1.000
代码实现(参考):
#include "stdio.h"
#include "math.h"
int d(int x,int y,int m,int n){
int i,j;
i=x-m;
j=y-n;
return i*i+j*j; //距离平方
}
int main()
{
int i,j;
int x[50],y[50];
float ff;
int m,min=0,n;
scanf("%d",&i);
j=0;
while(j<i)
{
scanf("%d%d",&x[j],&y[j]);
j++; //输入点的个数
}
for(j=0;j<i;j++)
{
for(m=j+1;m<i;m++)
if(min==0||d(x[j],y[j],x[m],y[m])<min)
min=d(x[j],y[j],x[m],y[m]); //最小值
}
ff=sqrt(min);
printf("%.3f",ff);
}
4、判断3次方数:
描述:
输入一个正整数n,问你这个数是不是某个整数的3次方。
输入格式:
一个整数n(0<n<=1000000)
输出格式:
是,输出YES(全大写),如果不存在,输出NO(全大写)
输入样例:
1000
输出样例:
YES
代码实现(参考):
#include "stdio.h"
int main()
{
int n,flag=0;
scanf("%d",&n);
for(int i = 1; i<n; i++){
if(i*i*i==n){
flag=1;
}
}
if(flag){
printf("YES");
}
else{
printf("NO");
}
}