C语言习题~day32
请问该程序的输出是多少()
#include<stdio.h>
int main(){
unsigned char i = 7;
int j = 0;
for(;i > 0;i -= 3){
++j;
}
printf("%d\n", j);
return 0;
}
A.2
B.死循环
C.173
D.172
无符号字符型的取值范围是 0 到 255。
第一次循环,i 从 7 减 3 变为 4,j 加 1 变为 1;第二次循环,i 变为 1,j 变为 2;第三次循环,i 变为 253(7 减 3 溢出后变为 253),j 加 1 变为 3;第四次循环,i 变为 250,j 加 1 变为 4;第五次循环,i 变为 247,j 加 1 变为 5;……依次类推,直到 i 变为 0 时,循环结束。
从 7 开始每次减 3,7、4、1、253、250、247……这样一共减了 173 次 3 才到 0,所以最终 j 的值是 173。
2.给定一个整数数组
nums
,将数组中的元素向右轮转k
个位置,其中k
是非负数。示例 1:
输入: nums = [1,2,3,4,5,6,7], k = 3 输出:[5,6,7,1,2,3,4]
示例 2: 输入:nums = [-1,-100,3,99], k = 2 输出:[3,99,-1,-100]/* 解题思路:使用三次逆转法,让数组旋转k次 1. 先整体逆转 2. 逆转子数组[0, k - 1] 3. 逆转子数组[k, size - 1] */ void reverse(int* nums, int begin, int end) { while(begin < end) { int tmp = nums[begin]; nums[begin] = nums[end]; nums[end] = tmp; ++begin; --end; } } // 三趟逆置倒的思路 void rotate(int* nums, int numsSize, int k){ if(k > numsSize) { k %= numsSize; } reverse(nums, 0, numsSize-1); reverse(nums, 0, k-1); reverse(nums, k, numsSize-1); }
3.数组
nums
包含从0
到n
的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?示例1
输入:[3,0,1] 输出:2 示例 2: 输入:[9,6,4,2,3,5,7,0,1]输出:8
int missingNumber(int* nums, int numsSize){ int n =numsSize; int ret=(n+0)*(n+1)/2; for(int i =0;i<numsSize;i++) { ret-=nums[i]; } return ret; }