题目:质因子求和函数
题目描述
输入一个大于1的正整数n,输出n的所有质因子的和。
对于给定的正整数n来说,质因子(或质因数)是指能整除n的质数,如果n自身也是质数的话,它自己也是自己的质因子。
质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。注意,1既不是质数也不是合数。
程序的开始部分已经写好如下:
#include <stdio.h>
程序的最后是main函数,main函数已经写好如下:
int main(){
int n,sum;
scanf("%d",&n);
sum = sumOfPrimeFactor(n); /*调用函数*/
printf("%d",sum);
return 0;
}在main函数中会调用一个名为sumOfPrimeFactor的函数,该函数会计算n的所有质因子的和并返回结果。
请补充提交你认为需要的程序剩余部分,OJ系统会将上述已有的代码和你提交的代码合并成一个程序再进行编译,因此请不要重复提交上述已有的代码。
输入描述
输入一个大于1的正整数n,OJ测试数据保证n是大于1的正整数,你不需要对此进行检测。
输出描述
输出n的所有质因子之和
样例输入
10
样例输出
7
题解
方法一:
#include<math.h>int sumOfPrimeFactor(int n){int sum=0,flag;for(int i=2;i<=n;i++){flag=1; //每次循环结束重置flagfor(int j=2;j<=sqrt(i);j++){if(i%j==0){flag=0;break;}}if(flag){ //若i不为质数,则不执行if语句if(n%i==0){sum+=i;n/=i;}}}if(sum==0) sum++; //若sum为0,即n为质数return sum; }
方法二:
#include<math.h>int jugdePrime(int n){if(n<2){return 0;}for(int i=2;i<=sqrt(n);i++){if(n%i==0){return 0;}}return 1; }int sumOfPrimeFactor(int n){int sum=0;for(int i=2;i<=n;i++){if(n%i==0&&jugdePrime(i)){ //调用函数判断i是否为质数(若n%i==0为假,则不会调用jugdePrime函数)sum+=i;}}return sum; }
后者的时间复杂度要小于前者
题目:单词个数统计函数1
题目描述
输入一行英文字符串,由若干单词组成,单词间仅由空格分隔。统计并输出该行字符串中的单词数量。
程序的开始部分已经写好如下:
#include <stdio.h>
#include <string.h>
程序的最后是main函数,main函数已经写好如下:
int main(){
char s[100];
gets(s);
int count = getWordNumber(s); /*调用函数*/
printf("%d",count);
return 0;
}在main函数中会调用一个名为getWordNumber的函数,该函数会统计字符串中单词的数量并返回结果。
请补充提交你认为需要的程序剩余部分,OJ系统会将上述已有的代码和你提交的代码合并成一个程序再进行编译,因此请不要重复提交上述已有的代码。
输入描述
输入一行英文字符串,由若干单词组成。OJ测试数据保证数组空间足够大,且单词之间仅由空格分隔。
但是在第一个单词前面可能有若干空格,最后一个单词后面也可能有若干空格,两个单词之间的分隔可能不止一个空格。
输出描述
输出字符串中的单词个数。
样例输入
Hello Guizhou University
样例输出
3
题解
#include<ctype.h>int getWordNumber(char s[]){int len=strlen(s);int count=0,flag=0;for(int i=0;i<len;i++){if(isalpha(s[i])){flag=1; //若s[i]为字母,记录}else{if(flag){ //若flag为0,即前面没有未记录的单词flag=0;count++;}}}if(flag){ //判断最后一个单词是否被记录count++;}return count; }
题目:比赛得分计算函数
题目描述
现在要举行某项比赛,共有n个裁判给选手打分。选手的得分计算规则是从n个裁判的打分中去掉一个最高分和一个最低分,
计算剩下裁判分数的平均分。例如有7个裁判打分,去掉一个最高分和一个最低分后,计算剩余5个裁判的平均分即可。
如果最高分或最低分不只一个,去掉一个就可以了。本题要求输入裁判人数及所有裁判的分数,输出选手的得分。
程序的开始部分已经写好如下:
#include <stdio.h>
程序的最后是main函数,main函数已经写好如下:
int main(){
int n,i;
double avg;
scanf("%d",&n);
double score[n];
for(i=0;i<n;i++)
scanf("%lf",&score[i]);
/*调用函数,计算选手得分*/
calculateScore(n,score,&avg);
printf("%.2f",avg);
return 0;
}在main函数中会调用一个名为calculateScore的函数,该函数会按上述规则计算选手的比赛得分。
请补充提交你认为需要的程序剩余部分,OJ系统会将上述已有的代码和你提交的代码合并成一个程序再进行编译,因此请不要重复提交上述已有的代码。
输入描述
先输入一个正整数n,代表有n个裁判打分(OJ测试数据保证n是正整数,不用进行检测)
再输入n个double型数据,代表n个裁判给出的分数(OJ测数数据保证这n个double数据都是正数,且在0.0~10.0范围内)
输出描述
输出选手的得分,小数点后保留两位。
样例输入
7
7.0 7.5 7.5 7.0 8.0 8.5 8.0
样例输出
7.60
题解
void calculateScore(int n,double score[],double* avg){int max=0,min=0;*avg=0;for(int i=0;i<n;i++){if(score[max]<score[i]) max=i; //记录最大值if(score[min]>score[i]) min=i; //记录最小值*avg+=score[i];}*avg=(*avg-score[min]-score[max])/(n-2); //去除最大值和最小值并求平均值 }
题目:质数个数函数
题目描述
输入一个大于1的正整数n,输出2~n之间的质数个数。
质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。注意,1既不是质数也不是合数。
程序的开始部分已经写好如下:
#include <stdio.h>
程序的最后是main函数,main函数已经写好如下:
int main(){
int n,num;
scanf("%d",&n);
num = numOfPrime(n); /*调用函数*/
printf("%d",num);
return 0;
}在main函数中会调用一个名为numOfPrime的函数,该函数会统计2~n之间的质数个数并返回结果。
请补充提交你认为需要的程序剩余部分,OJ系统会将上述已有的代码和你提交的代码合并成一个程序再进行编译,因此请不要重复提交上述已有的代码。
输入描述
输入一个大于1的正整数n,OJ测试数据保证n是大于1的正整数,你不需要对此进行检测。
输出描述
输出2~n之间的质数个数
样例输入
10
样例输出
4
题解
#include<math.h>int numOfPrime(int n){int num=0,flag;for(int i=2;i<=n;i++){flag=1; //每次循环需重置flagfor(int j=2;j<=sqrt(i);j++){if(i%j==0){flag=0;break;}}if(flag){num++;}}return num; }
题目:单词个数统计函数2
题目描述
输入一行英文字符串,由若干单词组成,单词间仅由空格分隔。统计并输出该行字符串中的大写英文字母开头的单词数量。
程序的开始部分已经写好如下:
#include <stdio.h>
#include <string.h>
程序的最后是main函数,main函数已经写好如下:
int main(){
char s[100];
gets(s);
int count = getWordNumber(s); /*调用函数*/
printf("%d",count);
return 0;
}在main函数中会调用一个名为getWordNumber的函数,该函数会统计字符串中大写英文字母开头的单词数量并返回结果。
请补充提交你认为需要的程序剩余部分,OJ系统会将上述已有的代码和你提交的代码合并成一个程序再进行编译,因此请不要重复提交上述已有的代码。
输入描述
输入一行英文字符串,由若干单词组成。OJ测试数据保证数组空间足够大,且单词之间仅由空格分隔。
但是在第一个单词前面可能有若干空格,最后一个单词后面也可能有若干空格,两个单词之间的分隔可能不止一个空格。
输出描述
输出字符串中的大写英文字母开头的单词个数。
样例输入
I love Guizhou We all Love guizhou University
样例输出
5
题解
#include<ctype.h>int getWordNumber(char s[]){int len=strlen(s);int count=0;for(int i=0;i<len;i++){if(isupper(s[i])) count++; //判断s[i]是否为大写字母}return count; }
以上解法有投机取巧的成分。
按题目的逻辑,还应判断该大写字母是否为单词首字母,以往的题目中有相关思路,在此不过多赘述。
题目:元素个数统计函数
题目描述
输入若干整数存储在数组中,统计数组中大于所有元素平均值的元素个数并输出结果。注意,元素的平均值计算使用double型数据。
程序的开始部分已经写好如下:
#include <stdio.h>
程序的最后是main函数,main函数已经写好如下:
int main(){
int n,i;
int num;
scanf("%d",&n);
int score[n];
for(i=0;i<n;i++)
scanf("%d",&score[i]);
/*调用函数,统计元素个数*/
countNum(n,score,&num);
printf("%d",num);
return 0;
}在main函数中会调用一个名为countNum的函数,该函数会统计数组中大于所有元素平均值的元素个数。
请补充提交你认为需要的程序剩余部分,OJ系统会将上述已有的代码和你提交的代码合并成一个程序再进行编译,因此请不要重复提交上述已有的代码。
输入描述
先输入一个正整数n,代表数组长度(OJ测试数据保证n是正整数,不用进行检测)
再输入n个整型数据,代表n个数组元素
输出描述
输出数组中大于平均值的元素个数。(注意元素的平均值计算使用double型数据)
样例输入
10
1 2 3 4 5 6 7 8 9 10
样例输出
5
题解
void countNum(int n,int score[],int* num){*num=0;double arg=0;for(int i=0;i<n;i++){arg+=score[i];}arg/=n*1.0;for(int i=0;i<n;i++){if(score[i]>arg) (*num)++;} }