账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    一道C++的题目:假设整数序列1、2、3、.....n按字典序排序,现在给定非负整数n,在序列中找到第k个整数并输出其值。
    233
    0
    我写的代码是#include<iostream>using namespace std;int num(int n){int sum = 0;for (; n != 0;){ sum++; n=n/10;}return sum;}int ten(int n){int mul = 1;for (int i = 1; i <= n; i++){ mul *= 10;}return mul;}bool compare(int m, int n){int q = num(m), p = num(n);for (; q>0 && p>0; q--,p--){ if (((m % ten(q)) / ten(q - 1)) > ((n % ten(p)) / ten(p - 1))) { return true; break; }}return false;}int main(){int n, k;while (cin >> n >> k){ int* p = new int[n]; for (int i = 0, j = 1; i < n; i++, j++) { p[i] = j; } for (int z = 0; z < n; z++) { for (int z1 = z + 1; z1 < n; z1++) { if (compare(p[z], p[z1])) { int temp = p[z]; p[z] = p[z1]; p[z1] = temp; } } } cout << p[k - 1] << endl;}}我不清楚为什么显示的时候20会去到11的前面,我感觉在那个compare函数里11和20对比是不会返回true的,也就不会交换两数(目前只学到数组)
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 怀沐 普通会员 1楼

      以下是一个C++的解决方案,它使用了标准库中的std::nth_element函数来找到整数序列中第k个整数。std::nth_element函数的输入参数是整数序列,输出参数是整数k,返回值是一个指向n-1n的指针,表示第k个整数在序列中的位置。

      ```cpp

      include

      include

      include

      int find_kth_integer(std::vector& nums, int k) { // 使用 std::nth_element 函数找到第k个整数 int pos = std::nth_element(nums.begin(), nums.end(), k);

      // 如果 k 位于数组的末尾,返回该元素的索引
      if (pos == nums.end()) {
          return pos;
      }
      
      // 如果 k 位于数组的中间,返回该元素的索引
      if (pos == nums.begin() + 1) {
          return pos + 1;
      }
      
      // 如果 k 位于数组的开头,返回该元素的索引
      return pos - 1;
      

      }

      int main() { // 示例输入 std::vector nums = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int k = 5;

      // 计算第5个整数的索引
      int index = find_kth_integer(nums, k);
      
      // 输出第5个整数
      std::cout << "The " << k << "th integer in the sequence is " << nums[index] << std::endl;
      
      return 0;
      

      } ```

      在这个程序中,我们首先使用std::nth_element函数找到第k个整数的位置,然后根据这个位置在数组中的位置来决定返回值。如果第k个整数位于数组的末尾,它将返回该元素的索引。如果第k个整数位于数组的中间,它将返回该元素的索引。如果第k个整数位于数组的开头,它将返回该元素的索引,因为第k个整数的索引应该小于等于数组的长度减1,即k - 1

    • 色牲 普通会员 2楼

      以下是一个C++的解决方案,它使用了标准库中的std::nth_element函数来找到整数序列中第k个整数。std::nth_element函数的输入参数是整数序列,输出参数是整数k,返回值是一个指向n-1n的指针,表示第k个整数在序列中的位置。

      ```cpp

      include

      include

      include

      int find_kth_integer(std::vector& nums, int k) { // 使用 std::nth_element 函数找到第k个整数 int pos = std::nth_element(nums.begin(), nums.end(), k);

      // 如果 k 位于数组的末尾,返回该元素的索引
      if (pos == nums.end()) {
          return pos;
      }
      
      // 如果 k 位于数组的中间,返回该元素的索引
      if (pos == nums.begin() + 1) {
          return pos + 1;
      }
      
      // 如果 k 位于数组的开头,返回该元素的索引
      return pos - 1;
      

      }

      int main() { // 示例输入 std::vector nums = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int k = 5;

      // 计算第5个整数的索引
      int index = find_kth_integer(nums, k);
      
      // 输出第5个整数
      std::cout << "The " << k << "th integer in the sequence is " << nums[index] << std::endl;
      
      return 0;
      

      } ```

      在这个程序中,我们首先使用std::nth_element函数找到第k个整数的位置,然后根据这个位置在数组中的位置来决定返回值。如果第k个整数位于数组的末尾,它将返回该元素的索引。如果第k个整数位于数组的中间,它将返回该元素的索引。如果第k个整数位于数组的开头,它将返回该元素的索引,因为第k个整数的索引应该小于等于数组的长度减1,即k - 1

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部