C语言机试篇(二)

题目一:出现次数最多的字符

描述

给定一个由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;
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值