1. 程式人生 > >吉大軟體專碩971-2010

吉大軟體專碩971-2010

#include<stdio.h>
int main(){
	int n,divisor,add =0;
	int sign = 0;
	int i;
	scanf("%d",&n);
	printf("%d的約數和為:",n);
	for(i=1;i<=n;i++)
		if(n % i == 0)
			if(sign == 0){
				printf("%d",i);
				add += i;
				sign = 1;
			}else{
				printf("+%d",i);
				add += i;
			}
		
	printf("=%d\n",add);
}


有關質數:判斷時,只需除以從2到根號n進行的正整數,若有能整除,則不是素數

#include<stdio.h>
#include<stdbool.h>//C中沒有bool型別,需要引入<stdbool.h>標頭檔案
#define N 2000
int main(){
	bool isPrime(int x);
	int prime[N];
	int y[N];
	int i,j=0;
	printf("{Xn}序列為:\n");
	for(i=2;i<=N;i++)
		if(isPrime(i)){
			prime[j] = i;
			printf("%d\t",prime[j]);
			j++;		
		}
	printf("\n{Yn}序列為:\n");
	for(i=0;i<j-1;i++){
		y[i] = prime[i+1] - prime[i];
		printf("%d\t",y[i]);
	}
	printf("\n");
	return 0; 
}
/*判斷x是否為素數,是返回true,不是返回false*/  
bool isPrime(int x){  
    int i;  
    bool is_prime=true;  
    for(i=2;i<=sqrt(x);i++)  
        if(x%i == 0){  
            is_prime = false;  
            break;  
        }  
    return is_prime;  
}  


#include<stdio.h>
#define N 12
int main(){
	int A[N]={0,3,0,1,0,0,0,0,-1,2,0,1};
	int i,j,k=N;
	printf("原來序列為:\n");
	for(i=0;i<N;i++)
		printf("%d\t",A[i]);
	printf("\n修改後的序列為:\n");
	while(k>0){
		for(i=0;i<N;i++){
			if(A[i]==0){//發現0元素,將此位之後的全部元素向前移一位,最後一位插入0 
				for(j=i;j<N-1;j++)
					A[j]=A[j+1];
				A[N-1]=0;			
			}
		}
		k--;
	}/*
	之所以用到while迴圈,是因為,有可能此位之後還是0元素,即幾個連續的0元素,
	當把此位之後的全部元素向前移一位後,i++,則下次判斷跳過了這個0,所以失敗
	N位陣列最多存放N個連續的0,所以while迴圈N遍,保證每一個0都判斷到,操作到位 
	*/ 
	for(i=0;i<N;i++)
		printf("%d\t",A[i]);
	printf("\n");
	return 0; 
}

方法二:

#include<stdio.h>
int main(){
    int *sort(int A[],int n);
    int A[12]={0,3,0,1,0,0,0,0,-1,2,0,1};
    int i;
    printf("原來序列為:\n");
    for(i=0;i<12;i++)
        printf("%d\t",A[i]);
    printf("\n修改後的序列為:\n");
    int *b = sort(A, 12);
    for(i=0;i<12;i++){
        A[i] = b[i];
        printf("%d\t",A[i]);
    }
    printf("\n");
    return 0;
}
int *sort(int A[],int n){
    int *b = (int *)malloc(n*sizeof(int));
    int i,j=0;
    for(i=0;i<n;i++){//把非零元素放在b中
        if(A[i]!=0){
            b[j] = A[i];
            j++;
        }
    }
    for(i=j+1;i<n;i++)//其餘位置0
        b[i] = 0;
    return b;
}


#include<stdio.h>
#define N 5
#define M N*N
int main(){
	int A[N][N]={{3,2,4,5,1},{10,9,3,4,2},{8,7,6,7,7},{8,3,4,1,2},{4,5,3,1,1}};
	int Frequency[M][2];//{元素,頻度} 
	int i,j,k,n=0;
	int sign;
	int max,max_i;
	printf("%d×%d的矩陣A如下:\n",N,N);
	for(i=0;i<N;i++){
		for(j=0;j<N;j++){
			printf("%d\t",A[i][j]);
			sign =0;
			for(k=0;k<n;k++){
				if(A[i][j]==Frequency[k][0]){
					Frequency[k][1]++;
					sign =1; 
					break;
				}
			
			}if(sign==0){
				Frequency[n][0] = A[i][j];
				Frequency[n][1] = 1;
				n++;
			}	
		
		}printf("\n");
	}
	/*找出頻度最大的數*/ 
	max = 1;//儲存最大的頻度 
	max_i = 0;//儲存頻度最大的數的下標 
	for(k=0;k<n;k++){
		if(max<Frequency[k][1]){
			max = Frequency[k][1];
			max_i=k;
		}
	}
	printf("出現頻度最高的元素為:%d,出現了%d次\n",Frequency[max_i][0],max);
	return 0; 
}