編程練習(一)(因子個數、完美數和迴文串)

問題一

  • 編寫一段代碼,求出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

  • 思路解析
    得到數據個數,進而確定二維數組的行數,再通過gets()函數將數據存到二維數組中,每行存放一個字符串。
    每次循環通過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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章