蓝桥杯:排列数-回溯(C语言)

简介: 题目如下

题目

2345_image_file_copy_310.jpg

2345_image_file_copy_311.jpg

思路

其实这道题是比较简单的,只要可以求出全排列,然后再检查每个全排列是否满足要求即可,如果不会全排列的可以参考一下这篇文章全排列C语言

代码

#include<stdio.h>
int a[1000];
int k;
int n;
int sum;
void jc(){
  int i;
  int t=0;
  for(i=2;i<n;i++){
    if((a[i]>a[i-1]&&a[i]>a[i+1])||(a[i]<a[i-1]&&a[i]<a[i+1])){
      t++;
    }
  }
  if(t==k){
    printf("--");
    sum=sum+1;
  }
}
void swap(int x,int y){
  int t;
  t=a[x];
  a[x]=a[y];
  a[y]=t;
} 
void perm(int p,int q){
  if(p==q){//当p==q说明到了最后一个元素 
    int j;
    for(j=1;j<=n;j++){
      printf("%5d",a[j]);
    }
    jc();
    printf("\n");
  }else{
    int i;
    for(i=p;i<=q;i++){
      swap(p,i);
      perm(p+1,q);
      swap(p,i);
    } 
  }
}
int main(){
  scanf("%d",&n);//输入n 
  scanf("%d",&k); 
  k--;
  //初始化数组
  //初始化数组 
  int i;
  for(i=1;i<=n;i++){
    a[i]=i;
  } 
  //排列函数 
  perm(1,n);//perm(x,y),将数组中第x至第y个元素进行全排列 
  printf("%d",sum%123456);
  return 0;
} 

结果

这里输出了全排列数为了方便观察。

2345_image_file_copy_312.jpg


相关文章
|
7月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-682 求先序排列
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-682 求先序排列
49 0
|
2月前
|
C语言
回溯入门题,数据所有排列方式(c语言)
回溯入门题,数据所有排列方式(c语言)
|
2月前
|
人工智能 算法 测试技术
2023年第15届蓝桥杯模拟赛第二期(c语言)
2023年第15届蓝桥杯模拟赛第二期(c语言)
136 0
|
7月前
|
存储 算法 C语言
C语言练习记录(蓝桥杯练习)(小蓝数点)
C语言练习记录(蓝桥杯练习)(小蓝数点)
|
7月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-627 排列
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-627 排列
50 0
|
7月前
|
Python
第十三届蓝桥杯B组python(试题A:排列字母)
第十三届蓝桥杯B组python(试题A:排列字母)
70 0
|
人工智能 算法 测试技术
[蓝桥杯] 枚举、模拟和排列问题
[蓝桥杯] 枚举、模拟和排列问题
83 0
|
存储 算法 C语言
【C语言蓝桥杯每日一题】——数字三角形
数字三角形🙌 题目描述 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个数。此外,向左下走的次数与向右下走的次数相差不能超过 1。
166 0
|
C语言
C语言练级之路num5(一些蓝桥杯的小题目)
C语言练级之路num5(一些蓝桥杯的小题目)
|
算法 C语言 C++
【C语言蓝桥杯每日一题】——排列字母
哈喽各位友友们😊,我今天又学到了很多有趣的知识,现在迫不及待的想和大家分享一下!😘我仅已此文,和大家分享【C语言蓝桥杯每日一题】——排列字母~ 都是精华内容,可不要错过哟!!!😍😍😍
148 0