1. 2830: 数字统计
分析:
题目是要求数字2出现的次数,那我们可以对大于9的数字取出个位和十位来判断是否是2,如果是2的话,那计数器就+1;具体呢就这个逻辑,那我们来看代码怎么实现。
#include<stdio.h> int main(){ int n,x,i,count=0,t; scanf("%d %d",&x,&n); for(;x<=n;x++){ int j=x; while(j>0){ t=j%10; if(t==2) count++; j=j/10; } } printf("%d",count); }
这道题就写完了。
2. 2240: 蓝桥杯算法训练-删除数组零元素
分析:
题目要求是定义一个函数Compactlntegers,来删除数组中的0,让元素向前面移动;知道条件,那就很好办了,先定义函数Compactlntegers,分别传入数组和数组的长度,然后进行遍历;如果是0的话后面的数字就等于前面的数字(覆盖),同时不等于0时计数器+1,函数返回值就是删除0后数组元素的数量,主函数内输出结果,这题就做完了。
#include <stdio.h> void CompactIntegers(); int main() { int t = 0; int a[100] = {0}; int b[100] = {0}; int n, count = 0; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", a + i); if(a[i]!=0) { a[t]=a[i]; t++; } } printf("%d\n",t); for(int i = 0;i<t;i++) { printf("%d ",a[i]); } }
3. 数字的处理与判断
分析:
题目很简单,就是分别求几位数和分离每一位数字,然后就是逆序打印数字。
我们上代码:
#include<stdio.h> int count(int y); void print(int x); void func(int z); int main() { int a; scanf("%d",&a); printf("%d\n",count(a)); print(a); printf("\n"); func(a); return 0; } void print(int x) { if(x>9) { print(x/10); } printf("%d ",x%10); } int count(int y) { int count = 0; while(y!=0) { y= y/10; count++;//这里是求几位数 } return count; } void func(int z) { if(z<10) { printf("%d",z); return; } printf("%d",z%10); func(z/10); }
4.1036 :指针传址调用 -C语言
分析:
这道题主要是需要会指针的传引用,指针交换变量,上代码!
#include<stdio.h> int main() { int swap(int *a,int *b); int a,b; scanf("%d%d",&a,&b); int *p1=&a; int *p2=&b; swap(p1,p2); printf("%d %d",a,b); return 0; } int swap(int *a,int *b) { int tmp; tmp=*a; *a=*b; *b=tmp; return 0; }
不可能通过执行调用函数来改变实参指针变量的值,但是可以改变实参指针变量所知变量的值
5. 2804: 与指定数字相同的数的个数
分析:
这道题可以很好的用数组来做,首先按照题目要求输入N,再输入N个数字;在for循环内遍历,如果是指定的数字m那么计数器就不断+1,直到遍历完整个数组为止。
#include<stdio.h> int main() { int arr[100]={0}; int n,i; int cnt,count,cut; cnt = 0,count = 0,cut = 0; scanf("%d",&n); for(i = 0;i<n;i++) { scanf("%d",&arr[i]); } for(i = 0;i<n;i++)//这里不是固定的 { if(arr[i]==1) { cnt++; } if(arr[i]==5) { count++; } if(arr[i]==10) { cut++; } } printf("%d\n%d\n%d\n",cnt,count,cut); }
6. 2798: 整数序列的元素最大跨度值
分析:
这道题依旧是数组来解决,我们首先定义最大值(max)和最小值(min),然后把这两个值定义为数组第一个元素,在数组内遍历,如果当前数字比max或min小那么max和min就是该数字。结果相减即可得到。我们来看代码:
#include <math.h> #include <stdio.h> #include <stdlib.h> #define N 1000 int main() { int arr[N] = {0}; int n, max, min; int i = 0; int sum = 0; scanf("%d", &n); for (i = 0; i < n;i++) { scanf("%d", &arr[i]); } max = 0, min = 0; max = arr[0]; min = arr[0]; for (i = 0; i < n; i++) { if (max<arr[i]) { max = arr[i]; } if (min>arr[i]) { min = arr[i]; } } sum = max - min; printf("%d",sum); }
7.2799: 奥运奖牌计数
分析:
这次就用不上数组了哦,定义三个变量输入,四个sum,依次相加输出就做完了,但是不能忽略的一点是不要忘记初始化变量。
#include<stdio.h> #include<math.h> int main() { int n; int a,b,c; a = 0,b = 0,c = 0; int sum1,sum2,sum3; sum1 = 0,sum2 = 0,sum3 = 0; int sum = 0; scanf("%d",&n); for(int i = 1;i<=n;i++) { scanf("%d%d%d",&a,&b,&c); sum1+=a; sum2+=b; sum3+=c; } printf("%d %d %d %d\n",sum1,sum2,sum3,sum1+sum2+sum3); return 0; }
8. 2819: 数字反转
分析:
这道题主要是分解每一位数字然后再次逆序打印出来,具体用while循环实现。
#include<stdio.h> void kr(int n); int main() { int n; scanf("%d",&n); kr(n); } void kr(int n) { int s; s = 0; while(n!=0){ s=s*10+n%10; n=n/10; } printf("%d",s); }
9.2883: 矩阵加法
分析:
定义三个数组,两个数组全部输入完成后相加后赋值个第三个数组,之后打印即可。
#include<stdio.h> int main() { int arr[100][100]; int brr[100][100]; int crr[100][100]; int a,b,i,j; scanf("%d%d",&a,&b); for(i = 0;i<a;i++) { for(j = 0;j<b;j++) { scanf("%d",&arr[i][j]); } } for(i = 0;i<a;i++) { for(j = 0;j<b;j++) { scanf("%d",&brr[i][j]); } } for(i = 0;i<a;i++) { for(j = 0;j<b;j++) { crr[i][j]=arr[i][j]+brr[i][j]; printf("%d ",crr[i][j]); } printf("\n"); } return 0; }
10. 2823: 计算分数加减表达式的值
分析:
重点在于我们需要定义一个变量来控制正负,每循环一次就颠倒一次正负。
下面是代码:
#include<stdio.h> int main() { int i,j; int sign = 1; double sum = 0; scanf("%d",&j); for(i = 1;i<=j;i++) { sum+=(double)sign*1/i; sign = -sign; } printf("%.4lf",sum); return 0; }