MT8. 奇数位丢弃
描述
输入描述
每组数据一行一个数字,为题目中的n(n小于等于1000)。输出描述
一行输出最后剩下的数字。示例1
输入:
500
输出:
255
C++14 解法, 执行用时: 1ms, 内存消耗: 372KB, 提交时间: 2020-08-20
#include <cstdio> int main() { int n; while(scanf("%d", &n) != EOF){ int b = 1; while(b <= n + 1){ b <<= 1; } printf("%d\n", (b >> 1) - 1); } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 296KB, 提交时间: 2021-12-11
#include <stdio.h> #include <assert.h> int main(void) { int n; while(scanf("%d", &n) != EOF) { // assert(n > 0); // assert(n <= 1000); int idx = 0, scale = 1; while(idx+scale <= n) { idx += scale; scale <<= 1; } printf("%d\n", idx); } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 316KB, 提交时间: 2021-09-16
#include <stdio.h> #include <math.h> int main() { int n=0; while(scanf("%d",&n) != EOF) { int m=0; int num = pow(2,m)-1; while(num < n) { int temp = pow(2,(m+1))-1; if(temp >= n) { printf("%d\n",num); break; } else { m++; num = temp; } } } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 316KB, 提交时间: 2021-08-21
#include <stdio.h> int main() { int n; while(scanf("%d",&n)!=EOF) { int num=0; while(n=n/2) { num=num*2+1; } printf("%d\n",num); } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 356KB, 提交时间: 2022-05-03
#include <stdio.h> #include <stdlib.h> int main() { int n = 0; while (scanf("%d", &n) != EOF) { /* int* arr = (int*)malloc(4 * n); if (arr == NULL) { perror("malloc"); return 1; }*/ int arr[1000] = { 0 }; int i = 0; int j = 0; int temp = n; for (i = 0; i <= n; i++) { arr[i] = i; } while (1) { j = 0; for (i = 1; i <= temp; i += 2) { arr[j++] = arr[i]; } temp = j; if (temp == 1) break; } printf("%d\n", arr[0]); //free(arr); //arr = NULL; } return 0; }