题目一:出现次数最多的字符
描述
给定一个由a-z这26个字符组成的字符串,统计其中哪个字符出现的次数最多。
格式
输入格式
输入包含一行,一个字符串,长度不超过1000。
输出格式
输出一行,包括出现次数最多的字符和该字符出现的次数,中间以一个空格分开。如果有多个字符出现的次数相同且最多,那么输出ascii码最小的那一个字符。
样例
输入样例
abbccc
输出样例
c 3
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(){
char result='a';
int timeA[26]={0};
char str[1000];
int temp;
scanf("%s",&str);
int len=strlen(str);
for(int i=0;i<len;i++){
temp=str[i]-97;
timeA[temp]++;
}
temp=0;
for(int i=1;i<26;i++){
if(timeA[i]>timeA[temp]){
temp=i;
}
}
printf("%c %d",result+temp,timeA[temp]);
return 0;
}
题目二:斐波那契数列
描述
要求输出斐波那契数列第n(1≤n≤64)项。
斐波那契的第i项总是等于它的前面两项之和,约定第一项为0,第二项为1,如下所示:
0, 1,1,2,3,5,8,13,21, 34……
格式
输入格式
一个正整数n,表示第n项
输出格式
一个正整数,第n项的值
样例
输入样例
5
输出样例
3
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(){
int temp[64];
temp[0]=0;
temp[1]=1;
int num;
scanf("%d",&num);
for(int i=2;i<num;i++){
temp[i]=temp[i-1]+temp[i-2];
}
printf("%d",temp[num-1]);
system("pause");
return 0;
}
题目三:开关灯
描述
假设有N盏灯(N为不大于5000的正整数),从1到N按顺序依次编号,初始时全部处于开启状态;有M个人(M为不大于N的正整数)也从1到M依次编号。
第一个人(1号)将灯全部关闭,第二个人(2号)将编号为2的倍数的灯打开,第三个人(3号)将编号为3的倍数的灯做相反处理(即将打开的灯关闭,将关闭的灯打开)。依照编号递增顺序,以后的人都和3号一样,将凡是自己编号倍数的灯做相反处理。
请问:当第M个人操作之后,哪几盏灯是关闭的,按从小到大输出其编号,其间用逗号间隔。
格式
输入格式
输入正整数N和M,以单个空格隔开。
输出格式
顺次输出关闭的灯的编号,其间用逗号间隔。
样例
输入样例
10
10
输出样例
1,4,9
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int offNum=0;
void turnOnOrOff(int lampN[5001],int k,int lampNum){
int temp=lampN[0];
for(int i=k;i<=lampNum;i++){
if(i%k==0){
if(lampN[i]==1){
lampN[i]=0;
offNum++;
}
else{
lampN[i]=1;
offNum--;
}
}
}
}
int main(){
int lampN[5001];
int peopleNum,lampNum;
scanf("%d %d",&lampNum,&peopleNum);
for(int k=1;k<=lampNum;k++){
lampN[k]=1;
}
for(int i=1;i<=peopleNum;i++){
turnOnOrOff(lampN,i,lampNum);
}
for(int j=1;j<=lampNum;j++){
if(lampN[j]==0){
if(offNum>1){
printf("%d,",j);
}
if(offNum==1){
printf("%d",j);
}
offNum--;
}
}
return 0;
}
tip:C中的数组在传参时是以指针形式传递的。即数组传递会退化为指针。
数组作为参数的函数调用例子:
#include <stdio.h>
void max1(double a[10]);
int main()
{
double a[10];
for(int i=0;i<=9;i++){
scanf("%lf",&a[i]);//实参
}
max1(a);//调用max1函数
return 0;
}
void max1(double b[10])//形参
{
double max=b[0];
int j=0,n;
for(n=1;n<=9;n++){
if(b[n]>max){
max=b[n];
j=n;}
}
}
题目四:不高兴的津津
描述
津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。
格式
输入格式
包括七行数据,分别表示周一到周日的日程安排。每行包括两个小于10的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。
输出格式
包括一行,这一行只包含一个数字。如果不会不高兴则输出0,如果会则输出最不高兴的是周几(用1, 2, 3, 4, 5, 6, 7分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。
样例
输入样例
5 3
6 2
7 2
5 3
5 4
0 4
0 6
输出样例
3
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(){
int week[7];
int schoolCourse,otherCourse;
for(int i=0;i<7;i++){
scanf("%d %d",&schoolCourse,&otherCourse);
week[i]=schoolCourse+otherCourse;
}
int result=0;
for(int j=0;j<7;j++){
if(week[j]>8&&week[j]>week[result]){
result=j;
}
}
if(week[result]>8){
printf("%d",result+1);
}else{
printf("%d",0);
}
return 0;
}
题目五:字符串逆序
描述
输入一串以‘!’结束的字符,字符串个数不大于10000,按逆序输出。
样例
输入样例
abc!
输出样例
cba
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(){
char str[10000];
int flag=-1;
for(int i=0;flag==-1;i++){
scanf("%c",&str[i]);
if(str[i]=='!'){
flag=i;
}
}
for(int j=flag-1;j>=0;j--){
printf("%c",str[j]);
}
return 0;
}
题目六:求f(x,n)
描述
已知
用递归函数求解。
格式
输入格式
第一数是x的值,第二个数是n的值。
输出格式
函数值,保留两位小数。
样例
输入样例
1 2
输出样例
0.40
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
double form(double n,double x){
while(n>=1){
if(n==1){
return x/(1.0+x);
}else{
if(n+form((n-1),x)==0) return -1;
return x/(n+form((n-1),x));
}
}
return -1;
}
int main(){
double x;
double n;
scanf("%lf %lf",&x,&n);
printf("%.2lf",form(n,x));
return 0;
}
题目七:三角形判断
描述
给定三个正整数,分别表示三条线段的长度,判断这三条线段能否构成一个三角形。如果能构成三角形,则输出“yes”,否则输出“no”。
格式
输入格式
输入共一行,包含三个正整数,分别表示三条线段的长度,数与数之间以一个空格分开。
输出格式
如果能构成三角形,则输出“yes” ,否则输出“no”。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(){
int max=0;
int edge[3];
scanf("%d %d %d",&edge[0],&edge[1],&edge[2]);
for(int i=1;i<3;i++){
if(edge[i]>edge[max]) max=i;
}
if((edge[(max+1)%3]+edge[(max+2)%3])>edge[max]){
printf("yes");
}else{
printf("no");
}
return 0;
}
题目八:点和正方形的关系
描述
有一个正方形,四个角的坐标(x,y)分别是(1,-1),(1,1),(-1,-1),(-1,1),x是横轴,y是纵轴。写一个程序,判断一个给定的点是否在这个正方形内(包括正方形边界)。如果点在正方形内,则输出yes,否则输出no。
格式
输入格式
输入一行,包括两个整数x、y,以一个空格分开,表示坐标(x,y)。
输出格式
输出一行,如果点在正方形内,则输出yes,否则输出no。
样例
输入样例
1 1
输出样例
yes
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(){
int x,y;
scanf("%d %d",&x,&y);
if(x>=-1&&x<=1&&y>=-1&&y<=1){
printf("yes");
}else{
printf("no");
}
return 0;
}
题目九:字符个数
题目描述
输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。
输入
一行字符
输出
统计值
样例输入
aklsjflj123 sadf918u324 asdf91u32oasdf/.’;123
样例输出
23 16 2 4
#include <stdio.h>
#include <stdlib.h>
int main(){
char temp;
int i=0;
int enzf=0,number=0,kg=0,other=0;
while((temp=getchar())!='\n'){
if(temp==' '){
kg++;
i++;
}
else if((temp>='a'&&temp<='z')||(temp>='A'&&temp<='Z')){
enzf++;
i++;
}
else if(temp>='0'&&temp<='9'){
number++;
i++;
}
else{
other++;
i++;
}
}
printf("%d %d %d %d\n",enzf,number,kg,other);
return 0;
}
题目十:分数求和
分数求和
题目描述
有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13… 求出这个数列的前N项之和,保留两位小数。
输入
N
输出
数列前N项和
样例输入
10
样例输出
16.48
#include <stdio.h>
int main(){
double fir=2,las=1;
double result=0;
double sum=0;
int time=0;
scanf("%d",&time);
for(int i=0;i<time;i++){
result+=fir/las;
sum=fir+las;
las=fir;
fir=sum;
}
printf("%0.2f\n",result);
return 0;
}