无限循环小数的分数和校外的树~

做了几个编程爱好者上的题,突然响起了当时在学校编程大赛的时候复赛的最后一个题,也就是我唯一一个没做上来的,结果与一等奖失之交臂……

无限循环小数的分数表达式

后来回去后用等比数列之和求极限做出了他的公式,现在写上,聊表纪念吧。

//============================================================================ // Name : ACM.cpp // Author : Yin Xusen // Version : // Copyright : Your copyright notice // Description : 将无限循环小数转换为分数 //============================================================================ #include <iostream> using namespace std; #define LMAX 100 int main() { char Input[LMAX]; int BeforeBit,AfterBit; int BeforeBitTen = 1,AfterBitTen = 1; int BeforeInt = 0,AfterInt = 0; int AnswerUp,AnswerDown; int tmp[LMAX]; int i,j; cout<<"输入格式:0.xx(xxx)"<<endl; cout<<"输入>"; cin>>Input; for(i = 2; Input[i] != '('; i++) tmp[i - 2] = Input[i] - '0'; BeforeBit = i - 2; for(j = 0; j < BeforeBit; j++) //日,错把异或当成了几次方! { BeforeBitTen *= 10; int xtmp = BeforeBit - 1 - j; int ytmp = 1; for (int k = 0; k < xtmp; k++) ytmp *= 10; BeforeInt += tmp[j] * ytmp; } i++; for(i; Input[i] != ')'; i++) tmp[i - BeforeBit - 3] = Input[i] - '0'; AfterBit = i - BeforeBit - 3; for(j = 0; j < AfterBit; j++) { AfterBitTen *= 10; int xtmp = AfterBit - 1 - j; int ytmp = 1; for (int k = 0; k < xtmp; k++) ytmp *= 10; AfterInt += tmp[j] * ytmp; } AnswerDown = BeforeBitTen * (AfterBitTen - 1); AnswerUp = (AfterBitTen - 1) * BeforeInt + AfterInt; cout << AnswerUp << endl; cout << "------" << endl; cout << AnswerDown <<endl; return 0; }

=====================================================================================

校门外的树

【问题描述】
某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。

由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。



【输入文件】
输入文件tree.in的第一行有两个整数L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。



【输出文件】
输出文件tree.out包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。



【样例输入】
500 3

150 300

100 200

470 471



【样例输出】
298



【数据规模】
对于20%的数据,区域之间没有重合的部分;
对于其它的数据,区域之间有重合的情况。
//input: L[1,10000],M[1,100] 文件tree.in //output: 马路上剩余树的数目 文件tree.out //先不用文件试试 #include <iostream> using namespace std; #define MAX 10000 #define MIN 100 typedef struct{ int Left; int Right; }Position; int main() { int i = 0; int l,m; int TreePos[MAX] = {0}; int count = 0; Position M[MIN]; cout<<"输入L和M>"; cin>>l>>m; cout<<endl<<"输入"<<m<<"个区间>"; for(i ; i < m ; i++) { cin>>M[i].Left>>M[i].Right; for(int j = M[i].Left ; j <= M[i].Right ; j++) TreePos[j]++; } for(i = 0; i < l; i++) if(TreePos[i] == 0) count++; cout<<count; return 0; }
这个题如果不计时间空间复杂度的话还是比较简单的。但是如果要论起来那就有点不好做了。关于逻辑方面以及比较什么的。
要求用文件操作我没用,以后补上。
最近比较纠结,几乎是把Windows32位汇编看过一遍了,但是越看越觉得一般,底层的东西是很详尽,但是学到最后觉得除了非常底层的外其他的都没什么必要去学。win32汇编毕竟和DOS IBM-PC时代的汇编不一样了,不论你怎么努力,终究是突破不了人家的权限,保护模式下的汇编程序设计尽管比较简单,但是除了其重定位的优势外,其他的和windows c编程还差不多。都是用人家的API.
最最关键的是没有一个良好的IDE环境...
最近学Linux的时候刚学完其进程的控制。是读写源码比较好呢?还是再往下把编程先看完比较好呢?Linux的优势到底何在?是为了拿来学OS?还是为了嵌入式开发?还是为了用于服务器的运作?纠结~

你可能感兴趣的:(编程,linux,windows,汇编,嵌入式,input)