算法入门笔记------------Day1
1.C语言使用%d显示float值,不会把float值转换为近似的int值,而是显示垃圾值,使用%f显示int值,也不会把该int值转换为浮点值
2.三位数反转:输入一个三位数,分离它的百位,十位和个位,反转后输出
#include<stdio.h>
int main(void)
{
int a;
scanf("%d",&a);
printf("%d %d %d\n",a%10,a/10%10,a/100);
return 0;
} //考虑250的情况,是够需要输出52还是052
#include<stdio.h>
int main(void)
{
int a;
scanf("%d",&a);
a=a%10*100+a/10%10*10+a/100;
printf("%03d\n",a);
return 0;
}
3.两数交换
//变量交换
#include<stdio.h>
int main(void)
{
int t,a,b;
scanf("%d%d",&a,&b);
t=a;
a=b;
b=t;
printf("%d %d",a,b);
return 0;
} //两变量方法
#include<stdio.h>
int main(void)
{
int a,b;
scanf("%d%d",&a,&b);
a=a+b;
b=a-b;
a=a-b;
printf("%d %d\n"a,b);
} //异或思想,慎用
#define swap(a,b) a^=b^=a^=b
注意这里的运用,对于同一变量的两次修改不能放在一个表达式里,
#include <stdio.h>
#define swap(a,b) a^=b^=a^=b
int main(void)
{
int a=1,b=2;
int c[]={1,2};
swap(a,b);
swap(c[0],c[1]);
printf("a=%d,b=%d\n",a,b);
printf("c[0]=%d,c[1]=%d\n",c[0],c[1]);
return 0;
} 在GCC下运行结果:
a=2,b=1
c[0]=0,c[1]=1
在VC6.0环境下运行结果:
a=2,b=1
c[0]=2,c[1]=1
4三整数
#include<stdio.h>
int main(void)
{
int a,b,c,t;
scanf("%d%d%d",&a,&b,&c);
if(a>b) {
t=a;a=b;b=t;
}
if(a>c){
t=a;a=c;c=t;
}
if(b>c){
t=b;b=c;c=t;
}
//从小到大排列
printf("%d %d %d\n",a,b,c);
return 0;
}
//注意这里如果是先a,b,再比较b,c,最后a,c,这里可能发生的是中间值被二次修改 #include<stdio.h>
int main(void)
{
int a,b,c,x,y,z;
scanf("%d%d%d",&a,&b,&c);
x=a;if(b<x) x=b;if(c<x) x=c;
z=a;if(b>z) z=b;if(c>z) z=c;
y=a+b+c-x-z;
printf("%d %d %d\n",x,y,z);
return 0;
}
5.C语言中三角函数使用弧度而不是角度
6.闰年的判断
if(year%4==0&&year%100!=0)||(year%400==0)
return 1;
else
return 0;
7.输出形如aabb的四位完全平方数
#include<stdio.h>
#include<math.h>
int main(void)
{
int a,b,s;
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
{
s=1100*a+11*b;
if(floor(sqrt(s)+0.5)==sqrt(s)) //floor是返回x的整数部分,为了减小误差采用四舍五入 floor(x+0.5)
printf("%d\n",s);
}
return 0;
} #include<stdio.h>
int main(void)
{
int x,n,hi,ho;
for(x=1;;x++)
{
n=x*x;
if(n<1000) continue;
if(n>9999) break;
hi=n/100;
ho=n%100;
if(hi/10==hi%10&&ho/10==ho%10) printf("%d\n",n);
}
return 0;
}
8.3n+1问题
#include<stdio.h>
int main(void)
{
int n,num=0;
scanf("%d",&n);
while(n>1)
{
if(n%2==1) n=3*n+1; //大数据,乘法可能溢出
else n=n/2;
num++;
}
printf("%d\n",num);
return 0;
} //当输出987654321的时候出现错误,原来是乘法溢出了
//为了解决这个问题,有个好点的方法可以解决,就是当n为奇数的时候,3n+1一定是偶数,这时候立刻除以2,也就是(3n+1)/2=(2n+n+1)/2=n+(n+1)/2;
#include<stdio.h>
int main(void)
{
int n,num=0;
scanf("%d",&n);
while(n>1)
{
if(n%2==1) {
n=n+(n+1)/2; //修改这里
num++;
}
else n=n/2;
num++;
}
printf("%d\n",num);
return 0;
}
9.阶乘之和
#include<stdio.h>
int main(void)
{
int i,j,n;
int s=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
int fac=1;
for(j=1;j<=i;j++)
fac*=j;
s+=fac;
}
printf("%d\n",s%1000000);
return 0;
} //这里可能会溢出,因为阶乘数据很大
所以采用对每一步进行对n取余,结果不变,这是一个数论的知识点
#include<stdio.h>
#include<time.h>
int main(void)
{
int i,j,n;
int s=0;
const int MOD=1000000;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
int fac=1;
for(j=1;j<=i;j++)
fac=(fac*j%MOD);
s=(s+fac)%MOD;
}
printf("%d\n",s);
printf("Time used=%.2lf\n",(double)clock()/CLOCKS_PER_SEC); //学习一下time头文件的用法
return 0;
}
10.文件操作
#define LOCAL
#include<stdio.h>
#define INF 1000000000
int main(void)
{
#ifdef LOCAL
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
#endif // LOCAL;
int x=0,n,min=INF,max=-INF,s=0;
while(scanf("%d",&n)==1)
{
if(n>max) max=n;
if(n<min) min=n;
s+=n;
x++;
}
printf("%d %d %.3lf\n",min,max,(double)s/x);
return 0;
} //文件输入输出操作,不使用重定向的方式
#include<stdio.h>
#define INF 10000000
int main(void)
{
FILE *fin,*fout;
fin=fopen("data.in","rb");
fout=fopen("data.out","wb");
int x=0,n,s=0,min=INF,max=-INF;
while(fscanf(fin,"%d",&n)==1)
{
if(n>max) max=n;
if(n<min) min=n;
s+=n;
x++;
}
fprintf(fout,"%d %d %.3lf\n",min,max,(double)s/x);
fclose(fin);
fclose(fout);
return 0;
}
习题
//输入一个不超过10的9次方的整数,输出它的位数
#include<stdio.h>
int main(void)
{
int n;
scanf("%d",&n);
int num=1;
while(n>9)
{
n=n/10;
num++;
}
printf("%d\n",num); } //水仙花数
#include<stdio.h>
int main(void)
{
int a,b,c;
for(int i=100;i<=999;i++)
{
a=i/100;
b=i/10%10;
c=i%10;
if(a*a*a+b*b*b+c*c*c==i)
printf("%d\n",i);
}
return 0;
} //韩信点兵
#include<stdio.h>
int main(void)
{
int a,b,c,i;
scanf("%d%d%d",&a,&b,&c);
for(i=10;i<=100;i++)
{
if(i%3==a&&i%5==b&&i%7==c)
{
printf("%d\n",i); break;
}
else continue;
}
if(i>100) printf("No answer\n");
return 0;
} //倒三角
#include<stdio.h>
int main(void)
{
int n;
scanf("%d",&n);
for(int i=n;i>=1;i--)
{
for(int j=1;j<=2*i-1;j++)
printf("#");
printf("\n");
for(int k=n;k>=i;k--)
printf(" ");
}
return 0;
} //分数化小数
#include<stdio.h>
int main(void)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("%.*lf\n",c,(double)a/b);
return 0;
} //近似计算,有点问题
#include<stdio.h>
#include<math.h>
int main(void)
{
int t=-1;
double a=1.0,sum=1.0;
while(fabs(a)>=0.01)
{
a=(1.0)/(a+2);
a=a*t;
sum=sum+a;
t=t*-1;
}
printf("%.9lf\n",sum);
return 0;
}
算法入门笔记------------Day1的更多相关文章
- 算法入门笔记------------Day4
1.WERTYU 输入一个错位后敲出的字符串,输出打字员本来想打出的字 #include<stdio.h> char *s="`1234567890-=QWERTYUIOP[]\ ...
- 算法入门笔记------------Day3
主要是复习前面的基本内容,以及函数的概念 组合数 #include<stdio.h> int f(int n) { int m=1; for(int i=1;i<=n;i++) m* ...
- 算法入门笔记------------Day2
1.开灯问题 有n盏灯,编号为1-n,第一个人把所有灯打开,第二个按下所有编号为2的倍数的开关(这些灯都被关掉),第三个人按下所有编号为3的倍数的开关,依次类推,一共有k个人,问最后有哪些灯开着?输入 ...
- Android NDK JNI 入门笔记-day04-NDK实现Hash算法
* Android NDK JNI 入门笔记目录 * 开头 前面的学习,我们已经掌握了 NDK 开发的必备知识. 下一步就要多实践,通过创造问题并解决问题,来增加熟练度,提升经验. 日常开发中,经常会 ...
- 「Android 开发」入门笔记
「Android 开发」入门笔记(界面编程篇) ------每日摘要------ DAY-1: 学习笔记: Android应用结构分析 界面编程与视图(View)组件 布局管理器 问题整理: Andr ...
- OpenCV图像处理学习笔记-Day1
OpenCV图像处理学习笔记-Day1 目录 OpenCV图像处理学习笔记-Day1 第1课:图像读入.显示和保存 1. 读入图像 2. 显示图像 3. 保存图像 第2课:图像处理入门基础 1. 基本 ...
- React.js入门笔记
# React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...
- redis入门笔记(1)
redis入门笔记(1) 1. Redis 简介 •Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure serv ...
- C++ 快速入门笔记:进阶编程
C++入门笔记:高级编程 文件和流 打开文件 void open (const char *filename, ios::openmode mode); ios::app 追加模式.所有写入都追加到文 ...
随机推荐
- Halcon学习之条形码实时扫描
dev_open_window(1,1,400,400,'blue',ThisHandle) create_bar_code_model([], [], BarCodeHandle) set_bar_ ...
- Linux下JDK、Tomcat
1.JDK的安装 1. 下载JDK 先查看Linux系统是多少位(32位/64位):getconf LONG_BIT.再从JDK官网(http://www.oracle.com/technetw ...
- 安装oracle ebs 出现问题 atleast 55M of disk space
出现这个问题 可以进行如下尝试: 1.登陆用户是否具有管理员权限,可以右击exe用管理员登陆. 2.安装电脑是否有安装mcafee,可以禁用后运行. 3.看下C:\Documents and Sett ...
- shell脚本中的反引号使用 `
反引号是~的英文切换 在shell脚本中,反引号允许将shell命令的输出赋值给变量. test=`date` 这样shell会执行反引号中的命令.并将执行的结果赋值给变量tests.
- Git使用心得
1.git是分布式的版本控制(有本地仓库)git 先对安全 2.git基于元数据 svn是基于目录的 3.本地的提交分为三个步骤(提交本地仓库先提交暂存区再提交本地仓库) 工作区 ...
- Tomcat8安装, 安全配置与性能优化
一.Tomcat 安装 官网:http://tomcat.apache.org/ Tomcat8官网下载地址:http://tomcat.apache.org/download-80.cgi 为了便于 ...
- Winform 中DataGridView的checkbox列,当修改checkbox状态时实时获得其状态值
不知道大家有没有这样的经验,当点击或者取消datagridview的checkbox列时,比较难获得其状态是选中还是未选中,进而不好进行其它操作,下面就列出它的解决办法: 主要用到了DataGridV ...
- ABAP 读取EXCEL文件到内表
1.选择excel文件: PARAMETERS: P_FILE LIKE RLGRAP-FILENAME OBLIGATORY. AT SELECTION-SCREEN ON VALUE-REQUES ...
- 提高SQL查询效率(SQL优化)
要提高SQL查询效率where语句条件的先后次序应如何写 http://blog.csdn.net/sforiz/article/details/5345359 我们要做到不但会写SQL,还要做到 ...
- 实现IComparable、IComparer接口
using System;using System.Collections.Generic; public class MyClass{ public class Employee:IComparab ...