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;//程序正常结束
}