编程练习(一)(C语言实现&20190408)

问题一

  • 编写一段代码,求出T(1<=T<=5000)个数字X(1<=X<=3000)的因子个数。

  • 输入
    第一行包含一个整数T,表示输入T(1<=T<=5000)组数据
    接下来的T行每行包含一个数X(1<=X<=3000)

  • 输出
    输出T行
    每行包含一个整数表示X的因子个数

  • 样例输入
    3
    5
    6
    7

  • 样例输出
    2
    4
    2

  • 思路解析
    通过输入的第一个数,也就是数据个数进而确定数组长度,再将之后输入的数据存到数组里。
    如何确定每个数的因子?从1开始遍历,只要被该数取余为0的数,都是该数的因子。

  • c语言实现如下

#include<stdio.h>
 
int main()
{
	int T,x,sum=0;
	scanf("%d",&T);
	int a[T];
	for(int i=0;i<T;i++){
		scanf("%d",&a[i]);
	}
	for(int i=0;i<T;i++){
		x=a[i];
		for(int j=1;j<=x;j++){
			if(x%j==0){
				sum++;
			}
		}
		printf("%d\n",sum);
		sum=0;
	}
	return 0;
}

问题二

  • 给出一个长度为n的数列,如果数列中一个数与其余n-1个数差的绝对值之和最小,这个数就是完美数。

  • 输入
    第一行一个数n,第二行n个数(1<=n<=10000)

  • 输出
    这个数列中的完美数,如果有多个输出任意一个

  • 样例输入
    6
    1 2 3 5 7 100
    11
    7 11 21 15 14 13 12 11 10 9 8

  • 样例输出
    3
    11

  • 思路解析
    有序数列的中位数即是完美数,如果数列个数为偶数,即存在多个完美数,输出一个即可。(即使中间两个完美数相差非常大,其差值也会相互抵消掉,可以私下进行验证,如有错误敬请指正。)
    同样是通过第一个数获取数组长度并存入之后的数据,将数组排序即可。
    由于数组是从0开始计数,因此在写循环判断条件时要理清是否会发生越界等问题。

  • c语言实现如下

#include<stdio.h>
#include<math.h> 
 
int main(){
	int n,x=0;
	scanf("%d\n",&n);
	int a[n];
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<n-i-1;j++){
			if(a[j]>a[j+1]){
				x=a[j];
				a[j]=a[j+1];
				a[j+1]=x;
			}
		}
	}
	x=n/2;
	printf("%d\n",a[x-1]);
	return 0;
}

问题三

  • 编程找出其中对称的串。

  • 输入
    第一行包含一个整数T,表示输入包含T组测试样例。每组测试用例输入一个字符串(长度小于1000)。

  • 输出
    对于每组样例,若字符串为回文串(对称串),输出Yes,否则输出No。

  • 样例输入
    3
    123
    121
    123456654321

  • 样例输出
    No
    Yes
    Yes

  • 思路解析
    得到数据个数,进而确定二维数组的行数,再通过getchar()函数将数据存到二维数组中,每行存放一个字符串。
    每次循环通过strlen()函数计算一个字符串长度,设置一个变量每次表示一个字符,与对称的那个字符相比,对称字符位置可以通过总长度减去该变量长度得出,任一组字符不对称,即为非回文串。

  • c语言实现如下

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
 
int main(){
	int T,x=0,j;
	scanf("%d\n",&T);
	char a[T][1000];
	for(int i=0;i<T;i++){
		gets(a[i]);
	}
	for(int i=0;i<T;i++){
		x=strlen(a[i]);
		for(j=0;j<x/2;j++){
			if(a[i][j]!=a[i][x-j-1]){
				break;
			}
		}
		if(j==x/2){
			printf("Yes\n");

		}
		else{
			printf("No\n");
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/CSDNTianJi/article/details/89318167
今日推荐