zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

C++C语言 数字 常见 习题 集锦 问答 之谜
2023-09-14 09:01:32 时间

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;
}

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