算法入门笔记------------Day4
1.WERTYU
输入一个错位后敲出的字符串,输出打字员本来想打出的字
#include<stdio.h>
char *s="`1234567890-=QWERTYUIOP[]\ASDFGHJKL;'ZXCVBNM,./";
int main(void)
{
int i,c;
while((c=getchar())!=EOF)
{
for(i=1;s[i]&&s[i]!=c;i++); //这里用分号,搜索到字符前一个位置
if(s[i])
putchar(s[i-1]);
else
putchar(c);
}
return 0;
}
2.判断一个双引号是左引号还是右引号
#include<stdio.h>
int main(void)
{
int c,q=1;
while((c=getchar())!=EOF)
{
if(c=='"')
{
printf("%s",q?"zz":"yy"); //z代表左引号,y代表右引号
q=!q;
}
else
putchar(c);
}
return 0;
}
3.输出一个字符串的最小周期
#include<stdio.h>
#include<string.h>
int main(void)
{
char s[100];
scanf("%s",s);
int len=strlen(s);
for(int i=1;i<=len;i++) //枚举所有周期
if(len%i==0)
{
int ok=1;
for(int j=i;j<len;j++) //第二个周期的第一个字符开始比较
{
if(s[j]!=s[j%i]) //如果和之前的字符不匹配,则不是一个周期
{
ok=0;
break;
}
}
if(ok)
{
printf("%d\n",i);
break;//找最小的周期,就退出,如果去掉就是找所有周期
}
}
return 0;
}
4.小学生算式,两个数相加输出多少次进位
#include<stdio.h>
int main(void)
{
int a,b;
while(scanf("%d%d",&a,&b)==2)
{
if(!a&&!b) return 0;
int c=0,ans=0;
for(int i=9;i>=1;i--)
{
c=(a%10+b%10+c)>9?1:0;
ans+=c;
a=a/10;
b=b/10;
}
printf("%d\n",ans);
}
return 0; }
5.阶乘的精确值
#include<stdio.h>
#include<string.h>
//const int maxn=1000 全局变量数组长度要求在编译时确定,const并不是真正的常量,可能会被修改,所以要声明成define
#define maxn 3000
int f[maxn];
int main(void)
{
int i,j,n;
scanf("%d",&n);
memset(f,0,sizeof(f));
f[0]=1;
for(i=2;i<=n;i++)
{
int c=0;
for(j=0;j<maxn;j++)
{
int s=f[j]*i+c;
f[j]=s%10;
c=s/10;
}
}
for(j=maxn-1;j>=0;j--)
if(f[j]) break;
for(i=j;i>=0;i--)
printf("%d",f[i]);
printf("\n");
return 0;
}
6.6174问题
#include<stdio.h>
#include<string.h>
int num[2000],count;
int get_next(int x);
int main(void)
{
scanf("%d",&num[0]);
printf("%d",num[0]);
count=1;
for(;;)
{
num[count]=get_next(num[count-1]); //生成下一个输出数
printf("->%d",num[count]);
//在数组num中寻找新生成的数
int found=0;
for(int i=0;i<count;i++)
{
if(num[i]==num[count])
{
found=1;
break;
}
}
//如果找到,直接退出循环
if(found) break;
count++;
}
printf("\n");
return 0; }
int get_next(int x)
{
int a,b,n;
char s[100];
sprintf(s,"%d",x); //转化成字符串
n=strlen(s);
for(int i=0;i<n;i++) //冒泡排序
{
for(int j=i+1;j<n;j++)
if(s[i]>s[j])
{
char t=s[i];
s[i]=s[j];
s[j]=t;
}
}
sscanf(s,"%d",&b); //写入到数字b中
for(int i=0;i<n/2;i++) //字符串反转
{
char t=s[i];s[i]=s[n-1-i];s[n-1-i]=t;
}
sscanf(s,"%d",&a); //写入数字中a
return a-b;
}
7.字母重排
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int n;
char word[2000][10],sorted[2000][10];
int cmp_char(const void * _a,const void *_b)
{
char *a=(char *)_a;
char *b=(char *)_b;
return *a-*b;
}
int cmp_string(const void * _a,const void * _b)
{
char *a=(char*)_a;
char *b=(char*)_b;
return strcmp(a,b);
}
int main(void)
{
n=0;
for(;;)
{
scanf("%s",word[n]);
if(word[n][0]=="*") break; //遇到结束终止循环
n++;
}
qsort(word,n,sizeof(word[0]),cmp_string); //给所有单词排序
for(int i=0;i<n;i++)
{
strcpy(sorted[i],word[i]);
qsort(sorted[i],strlen(sorted[i]),sizeof(char),cmp_char);
} //给每个单词排序
char s[10];
while(scanf("%s",s)==1) //持续读取到文件结尾
{
qsort(s,strlen(s),sizeof(char),cmp_char); //给输入单词排序
int found=0;
for(int i=0;i<n;i++)
{
if(strcmp(sorted[i],s)==0)
{
found=1;
printf("%s",word[i]); //输出原始单词,而不是排序后的
}
}
if(!found) printf(":(");
printf("\n");
}
return 0; }
8.cantor数集
#include<stdio.h>
int main(void)
{
int n;
while(scanf("%d",&n)==1)
{
int k=1,s=0;
for(;;)
{
s+=k;
if(s>n)
{
printf("%d/%d\n",s-n+1,k-s+n);
break;
}
k++;
}
}
return 0; }
9.因子和阶乘
#include<stdio.h>
#include<string.h>
int is_prime(int n)
{
for(int i=2;i*i<=n;i++)
{
if(n%i==0) return 0;
}
return 1;
}
int prime[100],count=0;
int main(void)
{
int n,p[100]; //n和各个素数的指数
for(int i=2;i<=100;i++)
{
if(is_prime(i)) prime[count++]=1;
}
while(scanf("%d",&n)==1)
{
printf("%d!=n",n);
memset(p,0,sizeof(p));
int max=0;
for(int i=1;i<=n;i++) //必须把i复制到变量m中,二不要在做除法时候修改它
{
int m=i;
for(int j=0;j<count;j++)
while(m%prime[j]==0)
{
m/=prime[j];
p[j]++;
if(j>max) max=j;
}
}
for(int i=0;i<=max;i++)
printf(" %d",p[i]);
printf("\n");
}
return 0;
}
算法入门笔记------------Day4的更多相关文章
- 算法入门笔记------------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个人,问最后有哪些灯开着?输入 ...
- 算法入门笔记------------Day1
1.C语言使用%d显示float值,不会把float值转换为近似的int值,而是显示垃圾值,使用%f显示int值,也不会把该int值转换为浮点值 2.三位数反转:输入一个三位数,分离它的百位,十位和个 ...
- Android NDK JNI 入门笔记-day04-NDK实现Hash算法
* Android NDK JNI 入门笔记目录 * 开头 前面的学习,我们已经掌握了 NDK 开发的必备知识. 下一步就要多实践,通过创造问题并解决问题,来增加熟练度,提升经验. 日常开发中,经常会 ...
- React.js入门笔记
# React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...
- redis入门笔记(1)
redis入门笔记(1) 1. Redis 简介 •Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure serv ...
- 「Android 开发」入门笔记
「Android 开发」入门笔记(界面编程篇) ------每日摘要------ DAY-1: 学习笔记: Android应用结构分析 界面编程与视图(View)组件 布局管理器 问题整理: Andr ...
- C++ 快速入门笔记:进阶编程
C++入门笔记:高级编程 文件和流 打开文件 void open (const char *filename, ios::openmode mode); ios::app 追加模式.所有写入都追加到文 ...
- golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web
micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go- ...
随机推荐
- dma驱动
http://www.crifan.com/files/doc/docbook/dma_pl08x_analysis/release/html/dma_pl08x_analysis.html#idp2 ...
- List<Object> to JSONArray一
package com.beijxing.TestMain; import java.util.ArrayList; import java.util.List; import com.beijxin ...
- User mode and kernel mode
[User mode and kernel mode] 参考:https://msdn.microsoft.com/en-us/library/windows/hardware/ff554836(v= ...
- [MVC] DIV 布局
[MVC] DIV 布局 <style> .top { background-color: red; height: 50px; top: 0px; position: absolute; ...
- 安装Linux系统Fedora 23
搭建了一个Linux(Fedora 23)环境,用于学习.实验. [TOC] 1 安装Fedora 以前一直只会光盘安装,刻录了好多个版本的distros,用完即弃在一旁.很浪费. 此次学会了在Lin ...
- Interpreter(解释器)-类行为型模式
1.意图 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 2.动机 如果一种特定类型的问题发生的频率足够高,那么可能就值的将该问题的各个实例表述为一个 ...
- c++ cout介绍与实现自己的cout
C++编程语言互换流中的标准输出流,需要iostream支持.读为 "c out([si:‘aʊt]". 名字 cout 类型 std::ostream 读为 "c ou ...
- Java重点之小白解析--浅谈HashMap与HashTable
这是一个面试经常遇到的知识点,无论什么公司这个知识点几乎是考小白必备,为什么呢?因为这玩意儿太特么常见了,常见到你写一百行代码,都能用到好几次,不问这个问哪个.so!本小白网罗天下HashMap与Ha ...
- hdu 5877 (dfs+树状数组) Weak Pair
题目:这里 题意: 给出一个n个结点的树和一个数k,每个结点都有一个权值,问有多少对点(u,v)满足u是v的祖先结点且二者的权值之积小于等于k. 从根结点开始dfs,假设搜的的点的权值是v,我们需要的 ...
- Spring ioc容器
一.ioc容器 ioc (inversion of control)即控制反转,把某一个接口选择实现类的控制权转移给Spring容器来管理.调用类对该实现类的依赖关系由ioc容器注入(DI),传统的 ...