C语言/C++常见习题问答集锦(四十五) 之数字之谜

C语言/C++常见习题问答集锦(四十五) 之数字之谜

程序之美

在这里插入图片描述

1、最大公约数
题目描述
给定N个正整数,求他们的最大公约数。
本题要求函数实现,接口如下:

int gcd_array(int num[], int size);
求大小为size的数组num的gcd。
输入:
输入有两行组成。
第一行是正整数N.(1<=N<=1000).
第二行是N个空格分开的正整数,值均小于2的31次方。
输出:
输出N个数的最大公约数。
样例输入:
3
12 18 24
样例输出:
6

int gcd_array(int num[], int size){
    int g,j, max, flag = 1, k;
    max = 0;
    for(k = 0; k < size; k++){
        if (num[k] > max)
        {
            max = k;
        }  
    }

    for (j = num[max]; j >= 0; j --)
    {
        flag = 1;
        for (k = 0; k < size; k++)
        {
            if (num[k] % j != 0)
            {
                flag = 0;
                break;
            }
            
        }

        if (flag == 1)
        {
            g = j;
            break;
        }
        
        
    }
    return g;
}
#include<stdio.h>
int main(){
    int N, num[1000], gcd, i, size;
    scanf("%d", &N);
    size = N;
    for (i = 0; i < N; i++)
    {
        scanf("%d", &num[i]);
    }
    gcd = gcd_array(num, size);
    printf("%d\n", gcd);
    return 0;
}

运行结果:
在这里插入图片描述

2、给定一个字符串,现在有q次询问,每一次询问给定一个区间,找到这个区间内出现最多的字符,若有多个出现最多的字符,输出ASCII码小的那一个。
输入
输入第一行一个字符串。
第二行一个整数q,代表有q次询问,每一次询问给定一个区间I和r
1<=len(s)<=104,1<=q<=104,1<=I<=r<=len(s),保证字符串只有小写字母构成。
输出:
对于每一次查询,输出一个答案代表区间内出现次数最多的字符
提示
字符串输入请用整行读入,不要一个字符一个字符读入
样例输入
aabcdeacfg
3
1 8
2 7
4 10

输出:
a
a
c

#include <stdio.h>
#include <stdbool.h>
int IsSame(char s[], int m, int n){
    int i, max, ret;
    int cnt[128]={0};//用来统计个数。
	max = 0;
    for(i = m - 1; s[i]!='\0' && i < n - 1; ++i)//遍历字符串。
    {
        cnt[s[i]]++;//统计个数。 
		if (cnt[s[i]] > max)
		{
			max = cnt[s[i]];
			ret = i;
		}
		
    }
    return ret;
}

int main()
{

    char str[200];//存储字符串。
	int n, s, e, i, v[512];
    gets(str);//输入字符串。

	printf("请输入区域个数:\n");
	scanf("%d", &n);

	if (n <= 0)
	{
		return;
	}
	
	for (i = 0; i < n; i++)
	{	
		printf("请输入第%d组区域:\n", i + 1);
		scanf("%d %d", &s, &e);

		v[i] = IsSame(str, s, e);
	}
	
    printf("ASCII码小的字符分别为:\n");

	for(i = 0; i < n; i++){
		printf("%c\n", str[v[i]]);
	}
	getchar();
    return 0;
}

运行结果为:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五一编程

程序之路有我与你同行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值