zzulioj

1104 求因子和

求一个数的所有正因子之和,不包括自己

#include <stdio.h>
int FacSum(int n);
int main()
{
	int x;
	scanf("%d",&x);//输入一个正整数
	printf("%d",FacSum(x)); 
	return 0;
 } 

 int FacSum(int n)//计算所有正因子的和 
 {
 	int i,sum=0;
 	for(i=1;i<n;i++){
 		if(n%i==0){
 			sum=sum+i;
		 }
	 }
	 return sum; 
  } 

1106 回文数

#include <stdio.h>
#include <math.h>
int inverse(int n)
{
	//整数逆转时,需要先判断该整数的位数
	//循环计算最高位对应的位数 
	// 然后利用取余 和除法 循环相加计算
	int i,j,w,x=1,sum=0;
	w=log10(n)+1;//初始位数为w
	for(i=1;i<w;i++){
		x=x*10;
	}
	for(j=1;j<=w;j++){
		sum=sum+n%10*x;
		x=x/10;
		n=n/10;
	} 
	return sum;
	
}
int main()
{
	int m,n,x;
//	printf("%d",inverse(123));
	scanf("%d %d",&m,&n);
	for(x=m;x<=n;x++){
		if(x==inverse(x))
		{
			printf("%d ",x);
		}
	}
	return 0;
}

1107 回文数猜想

#include <stdio.h>
#include <math.h>
int inverse(int n)
{
	//整数逆转时,需要先判断该整数的位数
	//循环计算最高位对应的位数 
	// 然后利用取余 和除法 循环相加计算
	int i,j,w,x=1,sum=0;
	w=log10(n)+1;//初始位数为w
	for(i=1;i<w;i++){
		x=x*10;
	}
	for(j=1;j<=w;j++){
		sum=sum+n%10*x;
		x=x/10;
		n=n/10;
	} 
	return sum;
	
}
int main()
{
	int n,m;
	scanf("%d",&n);
	while(m=inverse(n),m!=n){
		printf("%d ",n);
		n=n+m;
	}
	printf("%d",n);
	return 0;
}

1108打印数字图形

#include <stdio.h>
#include <math.h>
void PrintDigit(int m)
{
	int i,j;
	for(i=1;i<m;i++){
		printf("%d",i);
	}
	for(j=m;j>=1;j--){
		printf("%d",j);
	}
}
void PrintSpace(int m)//输出m个空格 
{
	int i;
	for(i=1;i<=m;i++){
		printf(" ");
	} 
}
int main()
{
	int n,i,j;
	scanf("%d",&n);
	for(i=1;i<=n;i++){
		PrintSpace(n-i);
		PrintDigit(i);
		PrintSpace(n-i);
		printf("\n");
	}
	for(j=(n-1);j>=1;j--){
		PrintSpace(n-j);
		PrintDigit(j);
		PrintSpace(n-j);
		printf("\n");
	}
	

	return 0;
}

1109 数根

#include <stdio.h>
#include <math.h>
//函数返回n的各位数字之和
int digitSum(int n)
{
	int i,j,x=1,w,sum=0;
	w=log10(n)+1;//判断有几位数
	for(j=1;j<=w;j++){
		sum=sum+n%10;
		n=n/10;
	} 
	return sum;
}

int main()
{
	int n,i,j,x;
	scanf("%d",&n);
	x=digitSum(n);
	while(x>9){
		x=digitSum(x);
	}
	printf("%d",x);
	return 0;
}

1110 最近共同祖先(递归函数)

#include <stdio.h>
#include <math.h>
int common(int x,int y)
{
	if(x==y){
		return x;
	}else if(x>y){
		common(x/2,y);
	}else{
		common(x,y/2);
	}
}
int main()
{
	int x,y,n;
	scanf("%d %d",&x,&y);
	n=common(x,y);
	printf("%d",n);
	return 0;
}

※1111多个整数的逆序输出(递归函数)

#include <stdio.h>
#include <stdlib.h>

void inverse(int n)
{
	int num;
	//读入一个整数,存入num;
 	if(n >1)
    { 
		scanf("%d",&num);
		inverse(n-1);  
		printf(" %d",num);
    }
    if( n == 1){
    	scanf("%d",&num);
    	printf("%d",num);
	}

}
int main()
{
    int n;
    scanf("%d", &n);
    inverse(n);
    return 0;
}

1112进制转换(递归)

#include <stdio.h>
#include <stdlib.h>
void convert(int n)
{
   if(n > 0)
   {
    //调用自身,输出n/2对应的二进制数;
    convert(n/2);
    printf("%d",n%2);
    //输出n%2;
    }
}
int main()
{
    int n;
    scanf("%d", &n);
    convert(n);
    return 0;
}

1113递归调用的次数统计

#include<stdio.h>
int fib(int k);
int ans=0;//定义的全局变量 
int main()
{
    int n;
    scanf("%d", &n);
    printf("%d\n", fib(n));  
    printf("递归调用了%d次",ans); 
    return 0;
}

int fib(int k)
{
    if(k == 1 || k == 2)
	{
		ans++;
		return 1;//递归调用了,增加次数 
	}
    else{
    	ans++;//递归调用了,增加次数 
    	return fib(k-1) + fib(k-2);
	}
       
}

1114逆序(数组)

注:数组开始,切记数组下标是从零开始的

#include<stdio.h>
int a[11];//定义的全局变量,数组是从零开始的 
int main()
{
    int i,n;
    scanf("%d",&n); 
    for(i=0;i<n;i++){
    	scanf("%d", &a[i]);	
	}
	for(i=n-1;i>-1;i--){
		printf("%4d",a[i]);
	}
    return 0;
}

1115数组最小值

#include<stdio.h>
#define N 1001
int a[N];//定义的全局变量,数组是从零开始的 
int min,f; 
int main()
{
    int i,n;//最小值min,最小值下表b 
    scanf("%d",&n); 
    for(i=0;i<n;i++){
        scanf("%d", &a[i]); 
    }
    min=a[0];
    for(i=0;i<n;i++){
        if(a[i]<min){
            min=a[i];
            f=i;
        }
    }
    printf("%d %d",min,f);
    return 0;
}

1116删除元素

#include<stdio.h>
int a[11];
void del(int a[], int n, int i);  /*删除数组a中下标为i的元素*/
void PrintArr(int a[], int n); /*输出数组a的前n个元素*/
void del(int a[], int n, int i) /*删除数组a中下标为i的元素*/
{
	int j;
	for(j=i;j<n;j++){
		a[j]=a[j+1];
	}
	n=n-1;
}
void PrintArr(int a[], int n) /*输出数组a的前n个元素*/
{
	int i;
	for(i=0;i<n;i++){
		printf("%d ",a[i]);
	}
}

int main()
{
    int i,n,x;//n个元素
    scanf("%d",&n);
    for(i=0;i<n;i++){
    	scanf("%d",&a[i]);	
	}
	scanf("%d",&x);//删除下标为x的元素 
	del(a,n,x);
	PrintArr(a,n-1);
    return 0;
}

1117查找数组元素

#include<stdio.h>
int a[11];
void del(int a[], int n, int i) /*删除数组a中下标为i的元素*/
{
	int j;
	for(j=i;j<n;j++){
		a[j]=a[j+1];
	}
	n=n-1;
}
void PrintArr(int a[], int n) /*输出数组a的前n个元素*/
{
	int i;
	for(i=0;i<n;i++){
		printf("%4d",a[i]);
	}
}

int find(int a[], int n, int x){
	int i;
	for(i=0;i<n;i++){
		if(a[i]==x){
			return i;
		}
	}
	return -1;
}
int main()
{
    int i,n,x;//n个元素
    scanf("%d",&n);
    for(i=0;i<n;i++){
    	scanf("%d",&a[i]);	
	}
	scanf("%d",&x);//删除数值为x的元素 
	if(find(a,n,x)==-1) {
		printf("Not Found");
	}else{
		del(a,n,find(a,n,x));//该参数 应该为所删除的下标 
		PrintArr(a,n-1);
	}
    return 0;
}

1118数列有序

#include<stdio.h>
#define N 1001
int a[N];
void insert(int a[],int n,int x)
{
	int i; 
	for(i=n-1;i>=0;i--)
	{
		if(x<a[i])//如果 
			a[i+1]=a[i]; 
		else 
			break;//说明前面数字已经没有符合条件的了 
	}
	a[i+1]=x;//此时要将第i+1个数字赋值为x 
}

void PrintArr(int a[], int n) /*输出数组a的前n个元素*/
{
	int i;
	for(i=0;i<n;i++){
		printf("%d ",a[i]);
	}

}
int main()
{
    int i,n,x;//n个元素
    scanf("%d",&n);
    for(i=0;i<n;i++){//循环初始化数组 
    	scanf("%d",&a[i]);	
	}
	scanf("%d",&x);//插入数值为x的元素 
	insert(a,n,x);
	PrintArr(a, n);
	printf("%d",a[n]);//最后一位 
    return 0;
}

1119一维数组排序

#include<stdio.h>
#define N 1001
int a[N];
void sort(int a[],int n)
{
	int i,j,temp;
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			if(a[i]<a[j]){
				temp=a[i];
				a[i]=a[j];
				a[j]=temp;
			}
		}
	} 
}

void PrintArr(int a[], int n) /*输出数组a的前n个元素*/
{
	int i;
	for(i=0;i<n;i++){
		printf("%d ",a[i]);
	}

}
int main()
{
    int i,n,x;//n个元素
    scanf("%d",&n);
    for(i=0;i<n;i++){//循环初始化数组 
    	scanf("%d",&a[i]);	
	}
	sort(a,n);
	PrintArr(a,n);
    return 0;
}

1120最值交换

#include<stdio.h>
#define N 11
int a[N];
int MinIndex(int a[], int n) //函数返回数组a中最小元素的下标
{
	int i,min,x;//最小值,和其下标a 
	min=a[0];
	for(i=0;i<n;i++){
		if(a[i]<min){
			min=a[i];
			x=i;
		}
	}
	return x;
}
int MaxIndex(int a[], int n) //函数返回数组a中最大元素的下标
{
	int i,max,b;//最小值,和其下标a 
	max=a[0];
	for(i=0;i<n;i++){
		if(a[i]>max){
			max=a[i];
			b=i;
		}
	}
	return b;
}
void PrintArr(int a[], int n) /*输出数组a的前n个元素*/
{
	int i;
	for(i=0;i<n;i++){
		printf("%d ",a[i]);
	}

}
int main()
{
    int i,n,c,b,temp1,temp2;//n个元素
    scanf("%d",&n);
    for(i=0;i<n;i++){//循环初始化数组 
    	scanf("%d",&a[i]);	
	}
	c=MinIndex(a,n);//最小值下标 
	b=MaxIndex(a,n);//最大值下标 
	temp1=a[c];//交换第一位 
	a[c]=a[0];
	a[0]=temp1;

	temp2=a[b];//交换最后一位 
	a[b]=a[n-1];
	a[n-1]=temp2;
	PrintArr(a,n);
    return 0;
}

正确的

#include<stdio.h>
int MinIndex(int a[], int n)
{	
	int min=a[0],t,x=0;//从第一个数开始往后找 
	for(int i=1;i<n;i++)
	{	
	if(a[i]<min)	min=a[i],x=i;
	}
	return x;//将最值下标返回	
}
int MaxIndex(int a[], int n)
{	
	int max=a[0],t,x=0;//从第一个数开始往后找
	for(int i=1;i<n;i++)
	{	
	if(a[i]>max) max=a[i],x=i;
	}	
	return x;//将最值下标返回 
}
void PrintArr(int a[],int n)
{
	for(int i=0;i<n;i++)//利用循环实现元素输出 
		printf("%d ",a[i]);//输出前n个数字 
}
int a[1001];//开辟数组a[]的空间 
int main()
{	
	int i,n,x,t;//定义循环变量i和数组元素个数n,以及最值下标记录数x和交换时的中间值t 
	scanf("%d",&n);//键盘输入n 
	for(i=0;i<n;i++)//键盘输入数组a[] 
	scanf("%d",&a[i]);
	x=MinIndex(a,n);//用最值函数找最值的下标并交换位置
	t=a[0],a[0]=a[x],a[x]=t;
	x=MaxIndex(a,n);//用最值函数找最值的下标并交换位置 
	t=a[n-1],a[n-1]=a[x],a[x]=t;
	PrintArr(a,n-1);//输入前n-1个数字 
	printf("%d",a[n-1]);//输出最后一个数字,没有空格 
	return 0;//程序正常结束 
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值