吉大軟體專碩971-2010
阿新 • • 發佈:2018-11-01
#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;
}