目录
11.车厢重组
12.Cantor表(升级版)
13.硬币翻转
14.peter的烟
15.字数整数
题目分析:很多人看到看到把相邻两节车厢交换,估计都想到冒泡排序,但是这题没让我们排序,只让我们输出最少旋转次数
先上冒泡排序
#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;
}
题目分析:本题其实核心就是求最大公约数,直接辗转相除法,还有要注意本题先输出列,再输出行,而且不难观察出分子代表行,分母代表列
#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;
}
题目分析:可以先从反面考虑,翻转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
题目分析:,先用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;
}
题目分析:此题关键在于如何取出三个字数,前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;
}