1.九九乘法表
知识点
循环结构程序设计
题目描述:
输出九九乘法表,输出格式见样例。
输入描述:
此题没有输入
输出描述:
输出乘法表,对齐方式见样例输出
示例1
输入:
无
输出:
1*1= 1
1*2= 2 2*2= 4
1*3= 3 2*3= 6 3*3= 9
1*4= 4 2*4= 8 3*4=12 4*4=16
1*5= 5 2*5=10 3*5=15 4*5=20 5*5=25
1*6= 6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7= 7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8= 8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9= 9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
题解:
输出行
#include<stdio.h>
int main()
{
int i;
int j;
for(i=1;i<10;i++) //控制行
{
for(j=1;j<=i;j++) //控制列
{
printf("%d*%d=%2d ",j,i,j*i);
}
printf("\n");
}
}
2.增加的兔子
知识点
斐波那契数列
题目描述:
古典问题,有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问一年之内每个月的兔子总数为多少?
输入描述:
无
输出描述:
输出一年之中每个月的兔子总数。
样式输入:
无
样式输出:
1 1 2 3 5 8 13 21 34 55 89 144
题解:
#include<stdio.h>
int main(void){
int a=1,b=1,i;
printf("%d,%d,",a,b);
for(i=1;i<10;i++)
{
a=a+b;
b=b+a;
printf("%d,%d,",a,b);
}
return 0;
}
3.KiKi求质数个数
知识点
循环结构程序设计
题目描述
KiKi知道了什么是质数(只能被1和他自身整除的数),他现在想知道所有三位整数中,有多少个质数。
输入描述:
无
输出描述:
一行,一个整数,表示所有三位整数中,有多少个质数。
题解:
#include<stdio.h>
#include<math.h>
int main() {
int count = 0;
int flag = 0;
for (int i = 100; i <= 999;i++) {
flag = 1;//默认是素数
for (int j = 2; j <= sqrt(i); j++) {//判断素数只需要判断到SQRT及之前的数即可
if (i % j == 0) {//有能被整除的数
flag = 0;
break;
}
}
if (flag) {
count++;
}
}
printf("%d", count);
return 0;
}
4.完数
知识点
函数
题目描述:
求1-n内的完数,所谓的完数是这样的数,它的所有因子相加等于它自身,比如6有3个因子1,2,3,1+2+3=6,那么6是完数。即完数是等于其所有因子(除了它自己)相加和的数。
输入描述:
测试数据有多组,输入n,n数据范围不大。
输出描述:
对于每组输入,请输出1-n内所有的完数。如有案例输出有多个数字,用空格隔开,输出最后不要有多余的空格。
示例1
输入
6
输出
6
题解:
#include <stdio.h>
int iswangshu(int m){//判断是否为完数
int n;
int sum=0;
for(int i=1;i<m;i++){
if(m%i==0){
sum+=i;
}
}
if(sum==m){
return 1;
}
else {
return 0;
}
}
int main(void) {
int s=0;
scanf("%d",&s);
for(int n=1;n<=s;n++){
if(iswangshu(n)){
printf("%d ",n);
}
}
return 0;
5.逆序输出
知识点
数组
题目描述:
输入10个整数,要求按输入时的逆序把这10个数打印出来。逆序输出,就是按照输入相反的顺序打印这10个数。
输入描述:
一行,输入10个整数(范围-231~231-1),用空格分隔。
输出描述:
一行,逆序输出输入的10个整数,用空格分隔。
示例1
输入:
1 2 3 4 5 6 7 8 9 10
输出:
10 9 8 7 6 5 4 3 2 1
题解:
#include <stdio.h>
int main() {
int a[]={1,2,3,4,5,6,7,8,9,10};
int length=sizeof(a)/sizeof(int);
int i;
int temp;
for(i=0;i<length;i++){
scanf("%d",&a[i]);
}
for(i=0;i<length/2;i++){
temp=a[i];
a[i]=a[length-1-i];
a[length-1-i]=temp;
}
for(i=0;i<length;i++){
printf("%d ",a[i]);
}
return 0;
}
6.杨辉三角
知识点
二维数组
题目描述
KiKi知道什么叫杨辉三角之后对杨辉三角产生了浓厚的兴趣,他想知道杨辉三角的前n行,请编程帮他解答。杨辉三角,本质上是二项式(a+b)的n次方展开后各项的系数排成的三角形。其性质包括:每行的端点数为1, 一个数也为1;每个数等于它左上方和上方的两数之和。
输入描述:
第一行包含一个整数数n。 (1≤n≤30)
输出描述:
包含n行,为杨辉三角的前n行,每个数输出域宽为5。
示例1
输入:
6
输出:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
题解:
/*杨辉三角最终显示效果是一个等腰三角形,两个最外边都是1
杨辉三角的根本在于,每个数等于它上方两数之和
*/
#include <stdio.h>
int main(){
int n;//变量n在此处起到了限制输出行数的作用,可优化成用户输入
scanf("%d",&n);
int i,j,a[n][n];
//使第一列和对角线元素的值为1
for (i=0;i<n;i++){ //前两行全为1,拿出来单独处理
a[i][i]=1;//使最右侧边全为1
a[i][0]=1;//使最左侧边全为1
}
//从第三行开始处理
for (i=2;i<n;i++) //三行开始出现变化
for (j=1;j<=i-1;j++) //j始终慢i一步
a[i][j]=a[i-1][j-1]+a[i-1][j];//每个数等于它上方两数之和,如a32=a21+a22
//输出数组各元素的值
for (i=0;i<n;i++){ //从第一行开始
for (j=0;j<=i;j++) //利用j将每一行的数据全部输出
printf(" %4d",a[i][j]);}
printf("\n");
}
return 0;
}
7.序列中整数去重
知识点
数组
题目描述
输入n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的整数,只保留该数第一次出现的位置,删除其余位置。
输入描述:
输入包含两行,第一行包含一个正整数n(1 ≤ n ≤ 1000),表示第二行序列中数字的个数;第二行包含n个整数(范围1~5000),用空格分隔。
输出描述:
输出为一行,按照输入的顺序输出去重之后的数字,用空格分隔。
示例1
输入:
5
10 12 93 12 75
输出:
10 12 93 75
#include <stdio.h>
int main() {
int n,a[30]={},i,j;
scanf("%d",&n);
for( i=0;i<=n;i++){
scanf("%d",&a[i]);
}
for(i=0;i<n;i++){
for(j=i+1;j<n;j++){
if(a[i]==a[j]){
a[j]=0;
}
}
}
for(i=0;i<n;i++){
if(a[i]!=0){
printf("%d ",a[i]);
}
}
return 0;
}