2023/1/4 作业
1,计算数组中完数的个数 【完数:除本身约数和等于本身。例如6:1 23 1+2+3=6 例如:28:1+2+4+7+14=18】 在该函数【void PerfectFun(int arr[],int n) 】循环数组每一个值;在该函数【int Perfect(int num) 】 判断完数,返回约数的和
#include <stdio.h>
void PerfectFun(int arr[],int n);
int Perfect(int num);
int main(int argc, const char *argv[])
{
int arr[]={1,2,4,6,15,16,28,8128};
int n;
n=sizeof(arr)/sizeof(arr[0]);
PerfectFun(arr,n);
return 0;
}
void PerfectFun(int arr[],int n)
{
int i,j,count;
count=0;
for(i=0;i<n;i++)
{
Perfect(arr[i]);
if(Perfect(arr[i])/2==arr[i])
count++;
}
printf("完数的个数为:%d\n",count);
}
int Perfect(int num)
{
int j,x;
int sum=0;
for(j=1;j<num;j++)
{
if(num%j==0)
{
x=num/j;
if(j<x)
{
sum+=x;sum+=j;
}
}
}
return sum;
}
2,实现单词的逆置 “hello my student” 最终结果是”student my hello” 在该函数【void StrFun( char str[]) 】 循环字符串的 在该函数【void StrRev(char str[],int i,int j) 】 主要是实现逆置的
#include <stdio.h>
#include <string.h>
void StrFun(char str[]);
void StrRev(char str[],int i,int j);
int main(int argc, const char *argv[])
{
int i;
int j;
char arr[]="hello world child am i";
i=0;
j=strlen(arr)-1;
StrRev(arr,i,j);
StrFun(arr);
puts(arr);
return 0;
}
void StrFun(char str[])
{
int i,j,k;
i=0;
j=0;
while(str[i]!='\0')
{
while(str[j]!=' '&&str[j]!='\0')
{
j++;
}
k=j-1;
StrRev(str,i,k);
while(str[j]==' ')
{
j++;
}
i=j;
}
}
void StrRev(char str[],int i,int j)
{
char temp;
while(i<j)
{
temp=str[i];
str[i]=str[j];
str[j]=temp;
i++;
j--;
}
}