|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
调换一个数中的两个数字位置,将该数最大化。
例如:15469 输出95461
1234 输出 4231
512 输出 521
- #include <stdio.h>
- int main()
- {
- long long int n,k;
- int i=0,j=0, m=0, t=0, b=0, c=0, A[100],B[100];
- scanf("%lld", &n);
- k=n;
- while(n != 0)
- {
- m++; // m =数字的位数
- n /= 10;
- }
- for(i = 0; i < m; i++)
- {
- A[i]=k%10; //A数组中是倒序存入每个数字
- k /= 10;
- }
- n=m;k=0;
- for(i = 0; i < m; i++)
- {
- B[i]=A[n-1]; //B数组是正序存入每个数字
- n--;
- }
- for(b = 0; b < m; b++)
- {
- for(i = 0; i < (m-b); i++)
- {
- if (B[b] < B[i+1])
- {
- t = B[b];
- B[b] = B[i+1]; //两个for语句想要实现换位,目前没办法实现
- B[i+1] = t;
- c++;
- break;
- }
- }
- }
- for(i=0; i<m; i++)
- {
- printf("%d", B[i]); //输出B中每个元素
- }
- return 0;
- }
复制代码
本帖最后由 人造人 于 2021-10-1 10:14 编辑
这次可以了
1. 用户输入一个数
2. 把这个数的各个数位提取出来
3. 对提取出来的数位按题目要求交换
4. 把交换后的数位组装成一个新的数
5. 输出这个数
- #include <stdio.h>
- #include <stdint.h>
- static void swap(char *a, char *b) {
- char temp = *a;
- *a = *b; *b = temp;
- }
- void digits_get(char digits[], size_t *size, uint32_t value) {
- *size = 0;
- do {
- digits[(*size)++] = (value % 10) + '0';
- value /= 10;
- } while(value);
- for(size_t i = 0, j = *size - 1; i < j; ++i, --j) \
- swap(&digits[i], &digits[j]);
- }
- void digits_set(const char digits[], size_t size, uint32_t *value) {
- *value = 0;
- for(size_t i = 0; i < size; ++i) {
- *value *= 10;
- *value += digits[i] - '0';
- }
- }
- void digits_swap(char digits[], size_t size) {
- for(size_t i = 0; i < size; ++i) {
- size_t max = i;
- for(size_t j = i + 1; j < size; ++j) {
- if(digits[max] < digits[j]) max = j;
- }
- if(max != i) {
- swap(&digits[i], &digits[max]);
- return;
- }
- }
- }
- int main(void) {
- char digits[10];
- size_t size;
- uint32_t n;
- scanf("%u", &n);
- digits_get(digits, &size, n);
- digits_swap(digits, size);
- digits_set(digits, size, &n);
- printf("%u\n", n);
- return 0;
- }
复制代码
|
|