《 火星人 》

題目描述

人類終于登上了火星的土地并且見到了神秘的火星人。人類和火星人都無法理解對方的語言,但是我們的科學家發明了一種用數字交流的方法。這種交流方法是這樣的,首先,火星人把一個非常大的數字告訴人類科學家,科學家破解這個數字的含義后,再把一個很小的數字加到這個大數上面,把結果告訴火星人,作為人類的回答。

火星人用一種非常簡單的方式來表示數字――掰手指。火星人只有一只手,但這只手上有成千上萬的手指,這些手指排成一列,分別編號為?1,2,3,?1,2,3,?。火星人的任意兩根手指都能隨意交換位置,他們就是通過這方法計數的。

一個火星人用一個人類的手演示了如何用手指計數。如果把五根手指――拇指、食指、中指、無名指和小指分別編號為?1,2,3,41,2,3,4?和?55,當它們按正常順序排列時,形成了?55?位數?1234512345,當你交換無名指和小指的位置時,會形成?55?位數?1235412354,當你把五個手指的順序完全顛倒時,會形成?5432154321,在所有能夠形成的?120120?個?55?位數中,1234512345?最小,它表示?11;1235412354?第二小,它表示?22;5432154321?最大,它表示?120120。下表展示了只有?33?根手指時能夠形成的?66?個?33?位數和它們代表的數字:

三進制數代表的數字
12312311
13213222
21321333
23123144
31231255
32132166

現在你有幸成為了第一個和火星人交流的地球人。一個火星人會讓你看他的手指,科學家會告訴你要加上去的很小的數。你的任務是,把火星人用手指表示的數與科學家告訴你的數相加,并根據相加的結果改變火星人手指的排列順序。輸入數據保證這個結果不會超出火星人手指能表示的范圍。

輸入格式

共三行。
第一行一個正整數?NN,表示火星人手指的數目(1≤N≤100001≤N≤10000)。
第二行是一個正整數?MM,表示要加上去的小整數(1≤M≤1001≤M≤100)。
下一行是?11?到?NN?這?NN?個整數的一個排列,用空格隔開,表示火星人手指的排列順序。

輸出格式

NN?個整數,表示改變后的火星人手指的排列順序。每兩個相鄰的數中間用一個空格分開,不能有多余的空格。

輸入輸出樣例

輸入 #1復制

5
3
1 2 3 4 5

輸出 #1復制

1 2 4 5 3

說明/提示

對于?30%30%?的數據,N≤15N≤15。

對于?60%60%?的數據,N≤50N≤50。

對于?100%100%?的數據,N≤10000N≤10000。

noip2004 普及組第 4 題

C語言代碼實現:

#include <stdio.h>
#include <stdlib.h>

// 交換數組中兩個元素的位置
void swap(int *a, int *b)?
{
? ? int temp = *a;
? ? *a = *b;
? ? *b = temp;
}

// 計算給定排列的下一個排列(按照字典序)
int next_permutation(int *arr, int n)?
{
? ? int i = n - 2;
? ? while (i >= 0 && arr[i] > arr[i + 1])?
?? ?{
? ? ? ? i--;
? ? }
? ? if (i < 0)?
?? ?{
? ? ? ? return 0;
? ? }
? ? int j = n - 1;
? ? while (arr[j] < arr[i])?
?? ?{
? ? ? ? j--;
? ? }
? ? swap(&arr[i], &arr[j]);
? ? int left = i + 1, right = n - 1;
? ? while (left < right) {
? ? ? ? swap(&arr[left], &arr[right]);
? ? ? ? left++;
? ? ? ? right--;
? ? }
? ? return 1;
}

int main() {
? ? int n, m,i;
? ? scanf("%d", &n);
? ? scanf("%d", &m);
? ? int *arr = (int *)malloc(n * sizeof(int)); ?// 動態分配內存?
? ? for (i = 0; i < n; i++)?
?? ?{
? ? ? ? scanf("%d", &arr[i]);
? ? }
? ??
? ? for (i = 0; i < m; i++)?
?? ?{
? ? ? ? next_permutation(arr, n);
? ? }
? ??
? ? for (i = 0; i < n; i++)?
?? ?{
? ? ? ? printf("%d", arr[i]);
? ? ? ? if (i!= n - 1)?
?? ??? ?{
? ? ? ? ? ? printf(" ");
? ? ? ? }
? ? }
? ? free(arr);
? ? return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63753.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63753.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63753.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器學習基礎算法 (二)-邏輯回歸

python 環境的配置參考 從零開始&#xff1a;Python 環境搭建與工具配置 邏輯回歸是一種用于解決二分類問題的機器學習算法&#xff0c;它可以預測輸入數據屬于某個類別的概率。本文將詳細介紹邏輯回歸的原理、Python 實現、模型評估和調優&#xff0c;并結合垃圾郵件分類案例進…

BiTCN-BiGRU基于雙向時間卷積網絡結合雙向門控循環單元的數據多特征分類預測(多輸入單輸出)

Matlab實現BiTCN-BiGRU基于雙向時間卷積網絡結合雙向門控循環單元的數據多特征分類預測&#xff08;多輸入單輸出&#xff09; 目錄 Matlab實現BiTCN-BiGRU基于雙向時間卷積網絡結合雙向門控循環單元的數據多特征分類預測&#xff08;多輸入單輸出&#xff09;分類效果基本描述…

云備份項目--工具類編寫

4. 文件工具類的設計 4.1 整體的類 該類實現對文件進行操作 FileUtil.hpp如下 /* 該類實現對文件進行操作 */ #pragma once #include <iostream> #include <string> #include <fstream> #include <vector> #include <sys/types.h> #include …

51c大模型~合集94

我自己的原文哦~ https://blog.51cto.com/whaosoft/12897659 #D(R,O) Grasp 重塑跨智能體靈巧手抓取&#xff0c;NUS邵林團隊提出全新交互式表征&#xff0c;斬獲CoRL Workshop最佳機器人論文獎 本文的作者均來自新加坡國立大學 LinS Lab。本文的共同第一作者為上海交通大…

【大學英語】英語范文十八篇,書信,議論文,材料分析

關注作者了解更多 我的其他CSDN專欄 過程控制系統 工程測試技術 虛擬儀器技術 可編程控制器 工業現場總線 數字圖像處理 智能控制 傳感器技術 嵌入式系統 復變函數與積分變換 單片機原理 線性代數 大學物理 熱工與工程流體力學 數字信號處理 光電融合集成電路…

一起學Git【第一節:Git的安裝】

Git是什么&#xff1f; Git是什么&#xff1f;相信大家點擊進來已經有了初步的認識&#xff0c;這里就簡單的進行介紹。 Git是一個開源的分布式版本控制系統&#xff0c;由Linus Torvalds創建&#xff0c;用于有效、高速地處理從小到大的項目版本管理。Git是目前世界上最流行…

消息隊列 Kafka 架構組件及其特性

Kafka 人們通常有時會將 Kafka 中的 Topic 比作隊列&#xff1b; 在 Kafka 中&#xff0c;數據是以主題&#xff08;Topic&#xff09;的形式組織的&#xff0c;每個 Topic 可以被分為多個分區&#xff08;Partition&#xff09;。每個 Partition 是一個有序的、不可變的消息…

《Mycat核心技術》第06章:Mycat問題處理總結

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章匯總&#xff1a;https://binghe.gitcode.host/md/all/all.html 星球項目地址&#xff1a;https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀&#xff0c…

【day11】面向對象編程進階(繼承)

概述 本文深入探討面向對象編程的核心概念&#xff0c;包括繼承、方法重寫、this和super關鍵字的使用&#xff0c;以及抽象類和方法的定義與實現。通過本文的學習&#xff0c;你將能夠&#xff1a; 理解繼承的優勢。掌握繼承的使用方法。了解繼承后成員變量和成員方法的訪問特…

隨手記:小程序兼容后臺的wangEditor富文本配置鏈接

場景&#xff1a; 在后臺配置wangEditor富文本&#xff0c;可以文字配置鏈接&#xff0c;圖片配置鏈接&#xff0c;產生的json格式為&#xff1a; 例子&#xff1a; <h1><a href"https://uniapp.dcloud.net.cn/" target"_blank"><span sty…

6.8 Newman自動化運行Postman測試集

歡迎大家訂閱【軟件測試】 專欄&#xff0c;開啟你的軟件測試學習之旅&#xff01; 文章目錄 1 安裝Node.js2 安裝Newman3 使用Newman運行Postman測試集3.1 導出Postman集合3.2 使用Newman運行集合3.3 Newman常用參數3.4 Newman報告格式 4 使用定時任務自動化執行腳本4.1 編寫B…

工具環境 | 工具準備

搭建一套驗證環境需要的工具如下&#xff1a; 虛擬機&#xff1a;推薦virtualbox ubuntu VM好用&#xff0c;但是免費的好像木有了&#xff0c;ubuntu界面版更加容易上手。 網上找安裝教程即可&#xff0c;注意實現文件共享、復制粘貼等功能。 EDA&#xff1a;VCS Veridi 工…

計算機網絡之王道考研讀書筆記-2

第 2 章 物理層 2.1 通信基礎 2.1.1 基本概念 1.數據、信號與碼元 通信的目的是傳輸信息。數據是指傳送信息的實體。信號則是數據的電氣或電磁表現&#xff0c;是數據在傳輸過程中的存在形式。碼元是數字通信中數字信號的計量單位&#xff0c;這個時長內的信號稱為 k 進制碼…

ROS2學習配套C++知識

第3章 訂閱和發布——話題通信探索 3.3.1 發布速度控制海龜畫圓 std::bind cstd::bind綁定成員函數時&#xff0c;需要加上作用域以及取址符號 因為不會將成員函數隱式的轉換成指針&#xff0c;因此需要加&符號&#xff1b; 后面的第一個參數必須跟具體對象&#xff0c;c…

法規標準-C-NCAP評測標準解析(2024版)

文章目錄 什么是C-NCAP&#xff1f;C-NCAP 評測標準C-NCAP評測維度三大維度的評測場景及對應分數評星標準 自動駕駛相關評測場景評測方法及評測標準AEB VRU——評測內容(測什么&#xff1f;)AEB VRU——評測方法(怎么測&#xff1f;)車輛直行與前方縱向行走的行人測試場景&…

第十七屆山東省職業院校技能大賽 中職組“網絡安全”賽項任務書正式賽題

第十七屆山東省職業院校技能大賽 中職組“網絡安全”賽項任務書-A 目錄 一、競賽階段 二、競賽任務書內容 &#xff08;一&#xff09;拓撲圖 &#xff08;二&#xff09;模塊A 基礎設施設置與安全加固(200分) &#xff08;三&#xff09;B模塊安全事件響應/網絡安全數據取證/…

mlr3機器學習AUC的置信區間提取

如果你在mlr3拿到機器學習的預測數據 ROC 過程原理探索 假設數據 df <- data.frame(Airis$Sepal.Length, groupsample(x c(0,1),size 150,replace T)) 分組為 0,1 # 變量A為連續性變量 library(pROC) roc_obj <- roc(df g r o u p , d f group, df group,dfA, le…

Halcon例程代碼解讀:安全環檢測(附源碼|圖像下載鏈接)

安全環檢測核心思路與代碼詳解 項目目標 本項目的目標是檢測圖像中的安全環位置和方向。通過形狀匹配技術&#xff0c;從一張模型圖像中提取安全環的特征&#xff0c;并在后續圖像中識別多個實例&#xff0c;完成檢測和方向標定。 實現思路 安全環檢測分為以下核心步驟&…

Java——多線程進階知識

目錄 一、常見的鎖策略 樂觀鎖VS悲觀鎖 讀寫鎖 重量級鎖VS輕量級鎖 總結&#xff1a; 自旋鎖&#xff08;Spin Lock&#xff09; 公平鎖VS非公平鎖 可重入鎖VS不可重入鎖 二、CAS 何為CAS CAS有哪些應用 1&#xff09;實現原子類 2&#xff09;實現自旋鎖 CAS的ABA…

ubuntu18.04升級到ubuntu20.04

為了使用qt6&#xff0c;在ubuntu18.04上各種折騰失敗&#xff0c;無奈只能升級到ubuntu20.04, 按照網上的教程沒成功。自己摸索了 lsb_release -a df -h sudo apt update sudo apt upgrade -y sudo apt dist-upgrade -y sudo apt autoremove -y sudo apt clean sudo apt inst…