赞
踩
a.首先第一步什么是奇数:奇数就是不能够被2整除的数;
b.我们需要输入一个数然后判断;
c.用if语句判断,如果输入的为奇数输出是奇数,否则不是奇数
- #include <stdio.h>
- int main()
- {
- int num = 0;
- printf("请输入数字: ");
- scanf("%d", &num);
- if (num % 2 == 1)
- printf("这个数是奇数\n");
- else
- printf("这个数不是奇数\n");
- return 0;
- }
a.首先我们需要100个数字。这里可以通过循环实现,for循环是最简单的方式。
b.循环出现的数字我们需要判断这个数是否为奇数。在fou循环嵌套if语句,如果这个数是奇数就输出,否则不输出。在基础上我们可以同循环计算奇数的个数。
- #include <stdio.h>
- int main()
- {
- int i = 0;
- int count = 0;
- for (i = 1; i <= 100; i++)
- {
- if (i % 2 == 1)
- {
- printf("%-2d ",i);打印每次找到的奇数
- count++;//计算奇数的个数
- }
- }
- printf("\n1-100之间一共有:%d个奇数\n",count);
- return 0;
- }
a,首先需要输入一个数字计算阶乘
b,阶乘n!=n*(n-1)*(n-2)...*2*1。在循环里计算n的阶乘
- #include <stdio.h>
- int main()
- {
- int n = 0;
- int i = 0;
- int sum = 1;
- scanf("%d",&n);
- for (i = 1; i <= n; i++)
- {
- sum = sum * i;
- }
- printf("%d!=%d",n,sum);
- return 0;
- }
a,首先产生1-10个数字,循环实现。
b,在循环中实现阶乘,并且将所有的阶乘相加起来。
- #include <stdio.h>
- int main()
- {
- int i = 0;
- int j = 0;
- int n = 0;
- scanf("%d",&n);
- int sum = 0;
- for (i = 1; i <= n; i++)
- {
- int k = 1;//将这个变量放在这里是为了每次数字进来重置k
- for (j = 1; j <= i; j++)//计算一个数的阶乘
- {
- k*= j;
- }
- sum = sum + k;//将阶乘相加起来
- }
- printf("%d \n",sum);
- return 0;
- }
在一个有序数组中查找某个数字,如果用传统的方法需要查找很多次。如果用二分查找法就会节省很多时间。例如,在1-100之间猜一个数字,我们会从中间隔分,然后判断数字是猜大了还是猜小了。
- #include <stdio.h>
- int main()
- {
- printf("请输入想要找到的数的下标:");
- int arr[10] = {1,2,3,4,5,6,7,8,9,10};
- int sz = sizeof(arr) / sizeof(arr[0]);//计算数组的长度
- int left = 0;//最左边的下标
- int right = sz - 1;//最右边的下标。找出左右下标是为了计算中间值的下标
- int n = 0;
- scanf("%d",&n);
- while (right >= left)
- {
- int mid = (left + right) / 2;//下标的中间值
- if (arr[mid] < n)
- {
- left = mid+1;
-
- }
- else if (arr[mid] > n)
- {
- right = mid - 1;
- }
- else
- {
- printf("找到了,下标是:%d\n",mid);
- break;
- }
- }
-
- if (right < left)
- {
- printf("找不到\n");
- }
- return 0;
- }
- #include <stdio.h>
- #include <string.h>
- #include <windows.h>
- int main()
- {
- char arr1[] = "welcome to bit!!!";
- char arr2[] = "#################";
- int right = strlen(arr1)-1;//计算字符的长度
- int left = 0;
- while (left <= right)
- {
- arr2[right] = arr1[right];//将arr1的内容从右边给arr2中
- arr2[left] = arr1[left];//将arr1的内容从左边给arr2中
- printf("%s\n",arr2);
- Sleep(1000);//间隔时间
- left++;
- right--;
- }
-
- return 0;
- }
- #include <stdio.h>
- int main()
- {
- //多组输入,一行有两个整数,分别表示年份和月份,用空格分隔。
- //针对每组输入,输出为一行,一个整数,表示这一年这个月有多少天。
- int year = 0;
- int month = 0;
- int i = 0;
- int arr[12] = { 31,29,31,30,31,30,31,31,30,31,30,31 };//将月份存到数组里面
- while (scanf("%d %d",&year,&month) != EOF)
- {
- if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
- {
-
- printf("%d\n", arr[month-1]);//闰年29天
- }
- else
- {
- if (month == 2)
- {
- printf("%d\n",arr[month-1]-1);//平年28天,数组下标2的-1就是28天
- }
- else
- {
-
- printf("%d\n", arr[month-1]);
- }
- }
- }
- return 0;
- }
- #include <stdio.h>
- #define A 10
- int main()
- {
- //1.编程,统计在所输入的10个实数中有多少个正数、多少个负数、多少分零。
- int arr[A];
- int j = 0, k = 0, m = 0;
- for (int i = 0;i < A;i++)
- {
- scanf("%d", &arr[i]);
- if (arr[i] > 0)
- j++;
- else if (arr[i] < 0)
- k++;
- else
- m++;
- }
- printf("正数=%d\n负数=%d\n零=%d\n", j, k, m);
- return 0;
- }
-
- #include <stdio.h>
- //输入一个整数数组,实现一个函数,
- //来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,
- //所有偶数位于数组的后半部分。
-
- void move_odd_even(int* arr, int len)
- {
- int left = 0;
- int right = len - 1;
- int tmp = 0;
- while (left < right)
- {
- while ((left < right)&& (arr[left] % 2 == 1))//找到左边的奇数
- {
- left++;
- }
- while ((left < right) && (arr[right] % 2 == 0))//找到右边的偶数
- {
- right--;
- }
- if (left<right)//交换奇偶数
- {
- tmp = arr[left];
- arr[left] = arr[right];
- arr[right] = tmp;
-
- }
- }
- for (int i = 0; i < len; i++)
- {
- printf("%d ", arr[i]);
- }
-
- }
- int main()
- {
- int arr[] = { 1,2,3,4,5,6,7,2,9,0 };
- int len = sizeof(arr) / sizeof(arr[0]);
- move_odd_even(arr,len);
-
- return 0;
- }
- void my_strlen(char* arr)
- {
- int count = 0;
- char* p = arr;
- while (*p != '\0')
- {
- count++;
- p++;
- }
- printf("%d\n",count);
- }
- int main()
- {
- char arr[] = "my love!";
- my_strlen(arr);
- return 0;
- }
- #include <stdio.h>
- int main()
- {
- int n = 0;
- scanf("%d", &n);
- int j = 0;
- int i = 0;
- int arr[100] = { 0 };
- int flag = 0;
- for (int i = 0; i < n; i++)
- {
- scanf("%d", &arr[i]);
- }
- for (i = n - 1, j = 0; i > 0; i--, j++)
- {
- if ((arr[i] >= arr[i - 1]) || (arr[j] >= arr[j + 1]))//从升序和降序考虑
- {
- flag = 1;
- }
- else
- {
- flag = 0;
- break;
- }
-
- }
- if (flag)
- printf("sorted\n");
- else
- printf("unsorted\n");
- return 0;
- }
- #include <stdio.h>
- void dif_arr(int* arr,int n)
- {
- int i = 0;
- int j = 0;
- for (i = 0; i < n - 1; i++)//进行冒泡排序,以降序的方法
- {
- for (j = 0; j < n - 1 - i; j++)
- {
- if (arr[j] < arr[j + 1])
- {
- int tmp = arr[j];
- arr[j] = arr[j + 1];
- arr[j + 1] = tmp;
-
- }
- }
- }
- printf("%d\n",arr[0]-arr[n-1]);
- }
- int main()
- {
- int n = 0;
- int arr[100] = { 0 };
- int i = 0;
- scanf("%d",&n);
- for (i = 0; i < n; i++)
- {
- scanf("%d",&arr[i]);
- }
- dif_arr(arr,n);
- return 0;
- }
- #include <stdio.h>
- int main()
- {
- int n = 0;
- int max = 0;
- int min = 100;
- scanf("%d", &n);
- int i = 0;
- int tmp = 0;//存放内次读取的成绩
- for(i=0; i<n; i++)
- {
- scanf("%d", &tmp);
- if(tmp > max)
- max = tmp;
- if(tmp < min)
- min = tmp;
- }
- printf("%d\n", max-min);
-
- return 0;
- }
- #include <stdio.h>
- void again_arr(int* arr, int k)
- {
- int i = 0;
- int j = 0;
- for (i = 0; i < k - 1; i++)//冒泡排序
- {
- for (j = 0; j < k - i - 1; j++)
- {
- if (arr[j] >arr[j + 1])
- {
- int tmp = arr[j];
- arr[j] = arr[j + 1];
- arr[j + 1] = tmp;
- }
- }
- }
- for (i = 0; i < k; i++)
- {
- printf("%d ", arr[i]);
- }
-
- }
- int main()
- {
- int m = 0;
- int n = 0;
- int arr[2000] = { 0 };
- int i = 0;
- int j = 0;
- scanf("%d%d",&m,&n);
- for (i = 0; i < m; i++)
- {
- scanf("%d",&arr[i]);
- }
- for (i = m; i < m+n; i++)
- {
- scanf("%d", &arr[i]);
- }
- int k = m + n;
- again_arr(arr, k);
- return 0;
- }
- #include <stdio.h>
- int main()
- {
- int n = 0;
- int i = 0;
- int j = 0;
- while(scanf("%d",&n)!=EOF)
- {
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < n; j++)
- {
- if (i == j)
- {
- printf("*");
- }
- else if((i+j)==n-1)
- {
- printf("*");
- }
- else
- {
- printf(" ");
- }
- }
- printf("\n");
- }
- }
-
- return 0;
- }
输入:
3 输出:
* ** *** **** *** ** *
- #include <stdio.h>
- int main()
- {
- int n = 0;
- int i = 0;
- int j = 0;
- while (scanf("%d", &n) != EOF)
- {
- //打印上部分
- for (i = 0; i <= n; i++)
- {
- for (j = 0; j < 2 * n - (i * 2); j++)
- {
- printf(" ");
- }
- for (j = 0; j < i + 1; j++)
- {
- printf("*");
- }
- printf("\n");
- }
- //打印下部分
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < (2 + i * 2); j++)
- {
- printf(" ");
- }
- for (j = 0; j < n - i;j++)
- {
- printf("*");
- }
- printf("\n");
- }
- }
- return 0;
- }
解题思路:
假如左旋3个字符,将第三个之后的字符都向前移动,需要两个循环体,控制每次移动的个数。
- #include <stdio.h>
- #include <string.h>
- void reverse_left(char* arr, int n)
- {
- int len = strlen(arr);
- int i = 0;
- for (i = 0; i < n; i++)
- {
- int b = arr[0];
- int j = 0;
- for (j = 0; j < len - 1; j++)
- {
- arr[j] = arr[j + 1];
- }
- arr[len - 1] = b;
- }
- printf("%s\n", arr);
- }
- int main()
- {
- int n = 0;
- scanf("%d",&n);
- char arr[] = "ABCDEF";
- reverse_left( arr, n);
-
- return 0;
- }
多组输入,一个整数(3~20),表示输出的行数,也表示组成正方形边的“*”的数量。
针对每行输入,输出用“*”组成的“空心”正方形,每个“*”后面有一个空格。
- #include <stdio.h>
- int main()
- {
- int i = 0;
- int j = 0;
- int n = 0;
- int arr[100][100] = { 0 };
- while (scanf("%d", &n) != EOF)
- {
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < n; j++)
- {
- arr[i][j] = '*';
- }
- }
- for (i = 1; i < n - 1; i++)
- {
- for (j = 1; j < n - 1; j++)
- {
- arr[i][j] = ' ';
- }
- }
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < n; j++)
- {
- printf("%c ", arr[i][j]);
- }
- printf("\n");
- }
- }
-
- return 0;
- }
- #include <stdio.h>
- int main()
- {
- int n = 0;
- while (scanf("%d", &n) != EOF)
- {
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < n; j++)
- {
- if (i == 0 || i == (n - 1) || j == 0 || j == (n - 1))
-
- printf("* ");
- else
- printf(" ");
- }
- printf("\n");
- }
-
- }
- return 0;
- }
第一行输入一个整数(0≤N≤50)。
第二行输入N个升序排列的整数,输入用空格分隔的N个整数。
第三行输入想要进行插入的一个整数。
输出为一行,N+1个有序排列的整数。
- #include <stdio.h>
- void add_num(int* arr, int n, int m)
- {
- arr[n] = m;
- int i = 0;
- int j = 0;
- for (i = 0; i <= n-1; i++)
- {
- for (j = 0; j <= n - i - 1; j++)
- {
- if (arr[j] > arr[j + 1])
- {
- int tmp = arr[j];
- arr[j] = arr[j + 1];
- arr[j + 1] = tmp;
- }
- }
- }
- for (i = 0; i <= n; i++)
- {
- printf("%d ",arr[i]);
- }
- }
- int main()
- {
- int n = 0;
- int arr[50] = { 0 };
- int i = 0;
- scanf("%d",&n);
- for (i = 0; i < n; i++)
- {
- scanf("%d",&arr[i]);
- }
- int m = 0;
- scanf("%d",&m);
- add_num(arr, n, m);
- return 0;
- }
- 作者:牛客108287542号
- 链接:https://www.nowcoder.com/discuss/389135905569734656
- 来源:牛客网
-
- #include <stdio.h>
- int main()
- {
- int arr[20] = { 0 };
- int n = 0;
- int i = 0;
- int tmp = 0;
- scanf("%d", &n);
- for (int i = 0; i < n; i++)
- {
- scanf("%d", &arr[i]);
- }
- int m = 0;
- scanf("%d", &m);
- for (i = n-1; i >=0; i--)
- {
- if (m < arr[i])
- {
- arr[i + 1] = arr[i];
- arr[i] = m;
- //arr[i] = arr[i + 1];
- }
- else
- break;
- }
- arr[i + 1] = m;
- for (int i = 0;i <= n;i++)
- {
- printf("%d ", arr[i]);
- }
- }
- #include <stdio.h>
- int main()
- {
- int a = 3;
- int b = 5;
- printf("交换前:a=%d,b=%d\n",a,b);
- a = a ^ b;
- b = a ^ b;
- a = a ^ b;
- printf("交换后:a=%d,b=%d\n", a, b);
- return 0;
- }
写一个函数返回参数二进制中 1 的个数。
比如: 15 0000 1111 4 个 1
- #include <stdio.h>
- int main()
- {
- int a = 0;
- scanf("%d",&a);
- int i = 0;
- int count = 0;
- for (i = 0; i < 32; i++)
- {
- if (((a >>i ) &1 ) == 1)
- {
- count++;
- }
- }
- printf("%d\n",count);
- return 0;
- }
- #include <stdio.h>
- int main()
- {
- unsigned int n = 0;
- scanf("%d",&n);
- int count = 0;
- while (n)
- {
- if (n % 2 == 1)
-
- count++;
- n /= 2;
-
- }
- printf("%d\n",count);
- return 0;
- }
- #include <stdio.h>
- int main()
- {
- int n = 0;
- scanf("%d",&n);
- int count = 0;
-
- while (n)
- {
- n = n & (n - 1);
- count++;
- }
- printf("%d\n", count);
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。