01數(shù)列排序
問題描述
給定一個(gè)長(zhǎng)度為n的數(shù)列慎宾,將這個(gè)數(shù)列按從小到大的順序排列。1<=n<=200
輸入格式
第一行為一個(gè)整數(shù)n冯勉。
第二行包含n個(gè)整數(shù)萌壳,為待排序的數(shù)亦镶,每個(gè)整數(shù)的絕對(duì)值小于10000日月。
輸出格式
輸出一行袱瓮,按從小到大的順序輸出排序后的數(shù)列。
代碼:
#include<stdio.h>
int main(void)
{
int n,k;
scanf("%d",&n);
long long int a[n];
for(k=0;k<n;k++)
{
scanf("%lld",&a[k]);
}
int i=0,j,tem;
for(i=0;i<n-1;i++){
for(j=0;j<n-i-1;j++){
if(a[i]>a[i+1]){
tem=a[i];
a[i]=a[i+1];
a[i+1]=tem;
// printf("%d",a[i]);
}
}
}
for(k=0;k<n;k++)
printf("%lld ",a[k]);
return 0;
}
Self Appraisal:垃圾暴力代碼
Compare:網(wǎng)上的代碼半斤八兩
Change:使用qsort()函數(shù)
改進(jìn)后:
#include<stdlib.h>
int comp(const void*a,const void*b)
{
//return *(int *)b - *(int *)a;從大到小
return *(int*)a-*(int*)b;//從小到大
}
int main(void){
int n,i;
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
qsort(a,n,sizeof(int),comp);//參數(shù)1.數(shù)組名2.排序的元素個(gè)數(shù)3.每個(gè)元素大小4.元素
for(i=0;i<n;i++){
printf("%d ",a[i]);
}
return 0;
}
Notes:qsort()函數(shù)
qsort(a,1000,sizeof(int),comp);
其中comp函數(shù)應(yīng)寫為:
int comp(const voida,const voidb)
{
return * (int* )a-* (int*)b;
}
上面是由小到大排序爱咬,return *(int *)b - *(int *)a; 為由大到小排序尺借。
02十六進(jìn)制轉(zhuǎn)八進(jìn)制
問題描述
給定n個(gè)十六進(jìn)制正整數(shù),輸出它們對(duì)應(yīng)的八進(jìn)制數(shù)精拟。
輸入格式
輸入的第一行為一個(gè)正整數(shù)n (1<=n<=10)燎斩。
接下來n行,每行一個(gè)由09蜂绎、大寫字母AF組成的字符串栅表,表示要轉(zhuǎn)換的十六進(jìn)制正整數(shù),每個(gè)十六進(jìn)制數(shù)長(zhǎng)度不超過100000师枣。
輸出格式
輸出n行怪瓶,每行為輸入對(duì)應(yīng)的八進(jìn)制正整數(shù)。
【注意】
輸入的十六進(jìn)制數(shù)不會(huì)有前導(dǎo)0践美,比如012A洗贰。
輸出的八進(jìn)制數(shù)也不能有前導(dǎo)0。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int turn(char a[]);
int main(void){
int i,n;
scanf("%d",&n);
char a[n][50];
for(i=0;i<n;i++)
scanf("%s",&a[i]);
int b[n];
for(i=0;i<n;i++){
b[i]=turn(a[i]);
}
for(i=0;i<n;i++)
printf("%o\n",b[i]);
return 0;
}
int turn(char a[]){
int i;
int len,t;
long long sum=0;
len=strlen(a);
for(i=0;i<len;i++){
if(a[i]<=9){
t=a[i]+'0';
}else{
t=a[i]-'A'+10;//ASCII碼
}
sum=sum*16+t;//最高位依次往下乘以16
}
return sum;
}
Self Appraisal:先轉(zhuǎn)十進(jìn)制再轉(zhuǎn)八進(jìn)制
Compare:網(wǎng)上的代碼均為轉(zhuǎn)二進(jìn)制再轉(zhuǎn)八進(jìn)制
Change:十進(jìn)制轉(zhuǎn)八進(jìn)制較容易所以先轉(zhuǎn)十進(jìn)制陨倡,這題得分兩個(gè)函數(shù)寫不然十分麻煩敛滋,即使如此大數(shù)還是算不了,估計(jì)得用二進(jìn)制數(shù)組存儲(chǔ)才能實(shí)現(xiàn)大數(shù)轉(zhuǎn)換兴革。
03,04,05,06,07沒什么好說
08 楊輝三角形
#include<stdio.h>
int main(void)
{
int n;
scanf("%d",&n);
int a[34][34]={0};
int i,j;
a[0][0]=1;
for(i=1;i<n;i++){
for(j=0;j<i+1;j++){
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
for(i=0;i<n;i++){
for(j=0;j<i+1;j++){
printf("%d ",a[i][j]);
}printf("\n");
}
return 0;
}
Self Appraisal:剛開始沒思路绎晃,不想直接算,后來只能硬著頭皮加
Compare:網(wǎng)上的代碼半斤八兩
Change:二維數(shù)組直接用
14 階乘計(jì)算(前面的沒什么好講)
PTA上看到過這道題杂曲,沒做出來庶艾,噩夢(mèng)