c语言百日刷题第三天

目录

11.车厢重组

12.Cantor表(升级版)

13.硬币翻转

14.peter的烟

15.字数整数


11.车厢重组

c语言百日刷题第三天_第1张图片

题目分析:很多人看到看到把相邻两节车厢交换,估计都想到冒泡排序,但是这题没让我们排序,只让我们输出最少旋转次数

先上冒泡排序

#include
int main(){
    int n,t;
    int count=0;
    scanf("%d",&n);
    int a[n];
    for(int i=0;ia[j]){
                t=a[i];a[i]=a[j];a[j]=t;count++;
              }
    printf("%d",count);
    return 0;
}

再上未排序的

#include
int main(){
    int count=0,n=0;
    scanf("%d",&n);
    int a[n];
    for(int i=0;ia[j]) count++;//找出在[i]后面且比a[i]小的数,即a[i]需要移动的次数
    printf("%d",count);
    return 0;
}

12.Cantor表(升级版)

c语言百日刷题第三天_第2张图片

题目分析:本题其实核心就是求最大公约数,直接辗转相除法,还有要注意本题先输出列,再输出行,而且不难观察出分子代表行,分母代表列 

#include
int gcc(int p,int q){   //辗转相除法
    int r;
    r=p%q;
    while(r){ p=q;q=r;r=p%q;}
    return q;
}
int main(){
    int a,b,c,x,y,m,n;
    scanf("%d/%d",&a,&b);
    scanf("%d/%d",&x,&y);
    m=a*x;n=b*y;
    c=gcc(m,n);
    printf("%d %d",n/c,m/c);
    return 0;
}

13.硬币翻转

c语言百日刷题第三天_第3张图片

 题目分析:可以先从反面考虑,翻转n-1枚硬币相当于翻转1枚硬币,所以直接得出翻转次数为n次,然后再应用翻转n-1次翻转思路去翻转

#include
int main(){
    int n,i,j;
    scanf("%d",&n);//硬币数
    printf("%d\n",n);
    int a[n]={0};//全部初始化为正面
    for(i=0;i

14.peter的烟

c语言百日刷题第三天_第4张图片

题目分析:,先用m储存n,每次手里的烟的根数为m-k-1,当然每次换烟的时候要判断m-k是否大于0,每次换烟n++ 

#include
int main(){
    int n,k,m;
    scanf("%d %d",&n,&k);
    m=n;
    while(m-k>=0){             //判断手里的烟头够不够换烟
                    m=m-k+1;   //手里的烟数量,k个烟头换一根烟
                    n++;        //最终烟的根数  
                }
    printf("%d",n);
    return 0;
}

15.字数整数

c语言百日刷题第三天_第5张图片

题目分析:此题关键在于如何取出三个字数,前3位可以直接/100,中间三位可以/10%1000,后三位可以%1000,取出字数之后遍历10000到30000,不过要注意当有数字符合条件时要标注,如果没有符合则输出N0

#include
int main(){
    int k,sub1,sub2,sub3,count;
    scanf("%d",&k);
    for(int i=10000;i<=30000;i++){
        sub1=i/100;sub2=i/10%1000;sub3=i%1000;
        if(!(sub1%k)&&!(sub2%k)&&!(sub3%k)){
            printf("%d\n",i);
            count=1;
          }
       }
    if(!count) printf("No");
    return 0;
}

 

你可能感兴趣的:(刷题记,c语言,算法,数据结构)