算法入门笔记------------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 追加模式.所有写入都追加到文 ...
随机推荐
- Windows服务一:新建Windows服务、安装、卸载服务
Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面 ...
- Net 分页功能的实现
首先写一个接口 1 2 3 4 5 6 public interface IPagedList { int CurrentPageIndex { get; set; } ...
- struts2配置文件中Action中的各属性的含义
StrutsApacheBeanJSPServlet attribute: 这个属性用来指定ActionForm保存到指定上下文时所使用的属性名.如果不指定attribute属性的值,将使用 ...
- Git常用命令整理
.初始化一个Git仓库:git init 2.添加文件到Git仓库: git add <file> 添加文件到暂存区 git commit 把文件提交到版本仓库 3.查看工作区状态:git ...
- logback 常用配置详解(二) <appender>
logback 常用配置详解(二) <appender> <appender>: <appender>是<configuration>的子节点,是负责写 ...
- java中的算术运算符、赋值运算符、比较运算符、逻辑运算符、条件运算符
一.算术运算符 算术运算符主要用于进行基本的算术运算,如加法.减法.乘法.除法等. Java 中常用的算术运算符: 其中,++ 和 -- 既可以出现在操作数的左边,也可以出现在右边,但结果是不同滴 例 ...
- Coursera Machine Learning 作业答案脚本 分享在github上
Github地址:https://github.com/edward0130/Coursera-ML
- hdu 5877 (dfs+树状数组) Weak Pair
题目:这里 题意: 给出一个n个结点的树和一个数k,每个结点都有一个权值,问有多少对点(u,v)满足u是v的祖先结点且二者的权值之积小于等于k. 从根结点开始dfs,假设搜的的点的权值是v,我们需要的 ...
- httpServletRequest对象、filter、servlet、servlet容器、catalina、tomcat、以及web容器之间的关系
学习servlet的时候经常感到疑惑 HttpServletRequest是服务器创建的?还是servlet容器创建的? 过滤器是服务器创建的?还是servlet容器创建的? serlet容器和tom ...
- [转]学术型 github 畅想
转自 http://wulfric.me/2013/09/github-and-academy/ 以 github 的精神提供学术服务,也许是一个不错的方向. 什么是 github? Github 是 ...