当前位置:   article > 正文

C语言习题~day32

C语言习题~day32

请问该程序的输出是多少()

  1. #include<stdio.h>
  2. int main(){
  3. unsigned char i = 7;
  4. int j = 0;
  5. for(;i > 0;i -= 3){
  6. ++j;
  7. }
  8. printf("%d\n", j);
  9. return 0;
  10. }

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]
  1. /*
  2. 解题思路:使用三次逆转法,让数组旋转k次
  3. 1. 先整体逆转
  4. 2. 逆转子数组[0, k - 1]
  5. 3. 逆转子数组[k, size - 1]
  6. */
  7. void reverse(int* nums, int begin, int end)
  8. {
  9. while(begin < end)
  10. {
  11. int tmp = nums[begin];
  12. nums[begin] = nums[end];
  13. nums[end] = tmp;
  14. ++begin;
  15. --end;
  16. }
  17. }
  18. // 三趟逆置倒的思路
  19. void rotate(int* nums, int numsSize, int k){
  20. if(k > numsSize)
  21. {
  22. k %= numsSize;
  23. }
  24. reverse(nums, 0, numsSize-1);
  25. reverse(nums, 0, k-1);
  26. reverse(nums, k, numsSize-1);
  27. }

3.数组nums包含从0n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?

示例1

输入:[3,0,1]
输出:2
示例 2:
输入:[9,6,4,2,3,5,7,0,1]
输出:8
  1. int missingNumber(int* nums, int numsSize){
  2. int n =numsSize;
  3. int ret=(n+0)*(n+1)/2;
  4. for(int i =0;i<numsSize;i++)
  5. {
  6. ret-=nums[i];
  7. }
  8. return ret;
  9. }
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/856578
推荐阅读
相关标签
  

闽ICP备14008679号