ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

大一上期末复习22/01/03

2022-01-03 19:36:16  阅读:98  来源: 互联网

标签:03 01 22 10 int printf main 100 include


1.求水仙花数
算法:暴力,枚举
题目:水仙花数是指一种三位数,其各个数之立方和等于该数。列出100-999内所有水仙花数。
思路:按照题意写循环。对每个数,先分离各个位的数字→求立方和→判断是否等于该数。如果是,输出。
C语言风格:

//one
#include<stdio.h>
int main(){
    int x,y,z,i;
    for(i=100;i<=999;i++){
        x=i/100;
        y=(i-100*x)/10;
        z=i%10;
        if((x*x*x+y*y*y+z*z*z)==i)
            printf("%d ",i);
    }
    return 0;
}

//two
#include<stdio.h>
#include<math.h>
int main(){
    int x,y,z,i;
    for(i=100;i<=999;i++){
        x=i/100;
        y=(i-100*x)/10;
        z=i%10;
        if((pow(x,3)+pow(y,3)+pow(z,3))==i)
            printf("%d ",i);
    }
    return 0;
}

C++语言风格:

#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int main(){
    int x,y,z,i;
    for(i=100;i<=999;i++){
        x=i/100;
        y=(i-100*x)/10;
        z=i%10;
        if((pow(x,3)+pow(y,3)+pow(z,3))==i)
            cout<<i<<' ';
    }
    return 0;
}

输入:无
输出:153 370 371 407

2.求质数
算法:数论-素数筛
题目:列出1-100之内所有质数。
质数:因子仅有1和它本身。
对算法的优化:2是最小的质数,不必从1开始枚举;一个合数,最大的因子是它的平方根。(减少了枚举量,节省了代码运行的时间和空间)
C语言风格:

#include<stdio.h>
#include<math.h>
int main(){
    int flag=0,i,j;
    for(i=2;i<100;i++){
    	flag=0;//不要忘记,每次判断之后要将标记变量flag归零
		for(j=2;j<=sqrt(i);j++){
        if(i%j==0)
            flag++;
    }
    if(flag==0)	
    	printf("%d ",i);
	}
    return 0;
}

C++语言风格:

#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int main(){
    int flag=0,i,j;
    for(i=2;i<100;i++){
    	flag=0;
		for(j=2;j<=sqrt(i);j++){
        if(i%j==0)
            flag++;
    }
    if(flag==0)	
    	cout<<i<<' ';
	}
    return 0;
}

输入:无
输出:2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

3.ASCII与大小写
输入一个大写字母,输出其对应小写字母和小写字母的ASCII码。
算法:模拟
分析:ASCII码,大写字母的比小写字母的小32。
C语言风格:

#include<stdio.h>
#include<math.h>
int main(){
    char ch;
	int x;
    scanf("%c",&ch);
    ch+=32;
    x=(int)ch;	
    	printf("%c %d",ch,x);
    return 0;
}

C++语言风格:

#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int main(){
    char ch;
	int x;
    cin>>ch;
    ch+=32;
    x=(int)ch;	
    	cout<<ch<<' '<<x;
    return 0;
}

输入:A
输出:a 97

4.二维数组右移一列,最后一列移动到0列
题目:一个4行3列数组,对所有元素右移一列,最后一列元素移到0列。
算法:模拟
分析:按题意要求即可,注意数组从0行0列开始。多开一列,暂时存储最第3列。
建议动手推演
C语言风格:

#include<stdio.h>
#include<math.h>
int main(){
    int a[4][4];
	for(int i=0;i<=3;i++)//line
		for(int j=0;j<=2;j++)//column
    scanf("%d",&a[i][j]);
    for(int i=0;i<=3;i++)//存储最后一列 
    	a[i][3]=a[i][2];
	for(int i=0;i<=3;i++)
		for(int j=1;j>=0;j--)//j减少,防止覆盖 
			a[i][j+1]=a[i][j];
	for(int i=0;i<=3;i++)
		a[i][0]=a[i][3];	
    for(int i=0;i<=3;i++)
		for(int j=0;j<=2;j++){ 
		printf("%d ",a[i][j]);
		if(j==2)	printf("\n"); 
		} 
    return 0;
}

C++语言风格:

#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int main(){
    int a[4][4];
	for(int i=0;i<=3;i++)//line
		for(int j=0;j<=2;j++)//column
    cin>>a[i][j];
    for(int i=0;i<=3;i++)//存储最后一列 
    	a[i][3]=a[i][2];
	for(int i=0;i<=3;i++)
		for(int j=1;j>=0;j--)//j减少,防止覆盖 
			a[i][j+1]=a[i][j];
	for(int i=0;i<=3;i++)
		a[i][0]=a[i][3];	
    for(int i=0;i<=3;i++)
		for(int j=0;j<=2;j++){ 
		cout<<a[i][j]<<' ';
		if(j==2)	cout<<endl; 
		} 
    return 0;
}

输入:(略)
输出:(略)

5.数列
1)1-100 an=n;
2)1-100, an=n(-1)^(n+1)
算法:模拟
分析:可以用循环求,也可以用有关公式;也可以在纸上手算出答案,代码中只写一个输出。
C语言风格:

#include<stdio.h>
#include<math.h>
int main(){
    int i,sum;
		for(i=1;i<=100;i++)
			sum+=i;
	printf("%d",sum);
    return 0;
}

C++语言风格:

#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int main(){
    int i,sum;
		for(i=1;i<=100;i++)
			sum+=i;
	cout<<sum;
    return 0;
}

输入:无
输出:5051

6.打折
(忘了题干长啥样了,略)
算法:
分析:
优化:
C语言风格:

C++语言风格:

7.一维数组折半查找
输入1个长度为n的升序数组,查找其中的元素x并输出x的数组下标。
算法:折半查找
C语言风格:

#include<stdio.h>
#include<math.h>
int a[233],n,mm,x,ans;
int bina(int a[], int n, int x){
	int low=0,high=n-1,mid;
	while(low<high){
		mid=(low+high)/2;
		mm=a[mid];
		if(mm<x)	low=mid+1;
		else if(mm>x)	high=mid-1;
		else return mid;
	}
}
int main(){
	scanf("%d",&n);
    for(int i=0;i<n;i++)
		scanf("%d",&a[i]);
	scanf("%d",&x);
	ans=bina(a,n,x);
	printf("%d",ans);
    return 0;
}

C++语言风格:

8.最大最小
输入10个正整数,找出其中的最大值和最小值
算法:模拟
分析:挨个比较
优化:
C语言风格:

//数组 
#include<stdio.h>
#include<math.h>
int a[233],maxn,minn;
int main(){
    for(int i=0;i<10;i++)
		scanf("%d",&a[i]);
		maxn=a[0],minn=a[0];
	for(int i=1;i<10;i++){
		if(a[i]>maxn)	maxn=a[i];
		if(a[i]<minn)	minn=a[i];
	}
	printf("maxn=%d minn=%d",maxn,minn);
    return 0;
}

C++语言风格:

C++语言风格:

9.韩信点兵问题
韩信是汉高祖刘邦手下的大将,他英勇善战,智谋超群,为汉朝建立了卓越的功劳。据说韩信的数学水平也非常高超,他在点兵的时候,为了知道有多少兵,同时又能保住军事机密,便让士兵排队报数:按从1至5报数,记下最末一个士兵报的数为1; 再按从1至6报数,记下最末一个士兵报的数为5; 再按从1至7报数,记下最末一个士兵报的数为4; 最后按从1至11报数,最末一个士兵报的数为10; 请编写程序计算韩信至少有多少兵。
算法:模拟
分析:
C语言风格:

#include "stdio.h"
void count(){
	for(int n=1;;n++){
		if((n%11==10)&&(n%7==4)&&(n%6==5)&&(n%5==1)){
			printf("%d\n",n);
			break;
		}
	}
}
int main(){
	count();
	return 0;
}

C++语言风格:

10.辗转相除求gcd(最大公约数)
算法:数论-辗转相除
分析:
C语言风格:

#include <stdio.h>
int main() {
	printf("输入需要取最大公约数的两位正整数:"); 
	int x,y,z;
 	scanf("%d %d",&x,&y);
 	if(x<y){//如果x<y,交换
 	int tmp;
 		tmp=x;
 		x=y;
 		y=tmp;
 	}
 	z=x%y;
 	while(z!=0) {//while循环,当z余数不为0时开始循环,当z为0时跳出循环体,并打印结果
  		x = y;  //将上一个除数赋值为被除数
  		y = z;  //将上一个余数赋值为除数
  		z =x%y; //开始取余
 	}
 printf("%d" ,y);
 return 0;
}

C++语言风格:

11.指针法求10个正整数中最大数最小数
算法:
分析:
优化:
C语言风格:

#include<stdio.h>
int main(){
    int a[10], i, max, min, * p;
    p = a;
    for (i = 0; i < 10; i++)
        scanf("%d", p++);
    max =[0], min = a[0];
    for (p = a; p < a + 10; p++){
        if (*p > max)
            max = *p;
        if (*p < min)
            min = *p;
    }
    printf("max=%d\n", max);
    printf("min=%d\n", min);
    return 0;
}

C++语言风格:

12.数组判断奇偶性
算法:模拟
分析:求余运算,分离奇数偶数。开三个数组:原数组、奇数组、偶数组
优化:
C语言风格:

#include<stdio.h>
int a[10],ji[10],ou[10];
int main(){
    for(int i=0;i<10;i++){
		scanf("%d",&a[i]);
	}
	int flag1=0,flag2=0,count=0;
	while(count<10){
		if(a[count]%2)	
			ji[flag1]=a[count],flag1++;
		else ou[flag2]=a[count],flag2++;
		count++;
	}
	for(int i=0;i<10;i++){
		if(ji[i]!=0) printf("%d ",ji[i]);
		else{
			printf("\n");
			break;
	}
		} 
	for(int i=0;i<10;i++){
		if(ou[i]!=0) printf("%d ",ou[i]);
		else {
			printf("\n");
			break;
		} 
	}
    return 0;
}

C++语言风格:

13.排序:交换(指针)、冒泡
算法:
分析:
优化:
C语言风格:

#include<stdio.h>
void swap(int*,int*);
int main(){
	int a=1,b=2;
	int*pa,*pb;
	pa=&a;pb=&b;
swap(pa,pb);
	return 0;
}
void swap(int*p1 ,int *p2){
	int temp;
	temp=*p1;
	*p1=*p2 ;
	*p2=temp ;
}

//冒泡排序:

//2.0基本冒泡排序
for(int i=1;i<=n-1;i++)
	for(int j=1;j<=n-i;j++)
	if(a[j]<a[j+1]){
		int tmp=a[j];
		a[j]=a[j+1];
		a[j+1]=tmp;
	}
//2.1改进冒泡排序
bool bo;
int i=1;
do{
	bo=true;
	//for(int i=1;i<=n-1;i++)
		for(int j=1;j<=n-i;j++)
			if(a[j]<[j+1]){
				int tmp=a[j];
				a[j]=a[j+1];
				a[j+1]=tmp;
				bo=false;
				}
				i++;
			}while(!bo);

标签:03,01,22,10,int,printf,main,100,include
来源: https://blog.csdn.net/Jessica_Shao/article/details/122288781

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有