1、请实现这么一个函数:传入一个int值,在屏幕输出类似LED显示屏效果的字母拼图,例如:
输入1234567890,输出:
提示:请注意每个字符的固定宽度和高度,两个数字间保留一个空格。
运行截图
2、请编写一段代码测试以下函数执行的正确性:
void unique(std::vector<int> & v);
这个函数的职责是去除传入数组中的重复元素。
提示1:函数返回结果不一定是依照某种顺序的;
提示2:请尽可能多的考虑各种可能出现bug的情况组合;
提示3:你编写的代码应当返回一个int值,返回0表示测试通过,返回1表示出现错误。
- void unique(vector<int> & v)
- {
- cout<<"去除重复前的数据"<<v.size()<<endl;
- for(int i=0;i<v.size();i++)
- cout<<v[i]<<" ";
-
- vector<int>::iterator itr = v.begin();
- for(int i=0;i<v.size();i++)
- {
- while (itr != v.end())
- {
- if (*itr == v[i])
- v.erase(itr);
-
- itr++;
- }
- }
-
-
- cout<<"去除重复后的数据"<<v.size()<<endl;
- for(int i=0;i<v.size();i++)
- cout<<v[i]<<" ";
- }
-
- int main()
- {
- vector<int> v;
- v.push_back(111);
- v.push_back(111);
- v.push_back(11);
- v.push_back(111);
- v.push_back(12);
- unique(v);
- }
当连续出现三个相同的时候会出错,求网友给出正解可参考http:///archives/424
3、实现如下函数:
void printInChinese(int num);
这个函数输入一个小于100000000(一亿)的正整数,并在屏幕上打印这个数字的中文写法。
例如:
17 -> 一十七
120 -> 一百二十
201 -> 二百零一
1074 -> 一千零七十四
65536 -> 六万五千五百三十六
1010101 -> 一百零一万零一百零一
提示:请注意‘零’的处理。
扩展:如果需要处理通用简化习惯,你将怎么处理,例如:
17 -> 十七
120 -> 一百二
- package javaJY;
-
-
-
-
-
- public class Num2Rmb2 {
- public static void main(String[] args) {
- System.out.println(printInChinese(1));
- System.out.println(printInChinese(10));
- System.out.println(printInChinese(100));
- System.out.println(printInChinese(5005));
- System.out.println(printInChinese(1357902468));
- System.out.println(printInChinese(1010101));
- }
-
- public static String printInChinese(int number) {
- char[] chineseNumber = new char[] { '零', '壹', '贰', '叁', '肆', '伍', '陆',
- '柒', '捌', '玖' };
- char[] units = new char[] { '元', '拾', '佰', '仟', '万', '拾', '佰', '仟',
- '亿', '拾', '佰', '仟' };
- StringBuilder sb = new StringBuilder();
- long lastNumber = 0;
- int index = 0;
- while (number > 0) {
- lastNumber = number % 10;
- if (lastNumber != 0)
- {
- sb.insert(0, units[index++]);
- sb.insert(0, chineseNumber[(int) lastNumber]);
- } else
- {
- if (sb.length() == 0)
- {
- sb.insert(0, units[index++]);
- } else {
- if (sb.lastIndexOf("元") == 0) {
- index++;
- } else {
- if (sb.charAt(0) != '零')
- {
- sb.insert(0, chineseNumber[(int) lastNumber]);
- index++;
- } else {
- index++;
- }
- }
- }
- }
- number /= 10;
- }
- return sb.toString();
- }
- }
输入101010101时好像会出问题,求网友给出解答。
4、已知完全弹性碰撞公式如下:
其中m1 m2为小球质量,v1 v2为原始速度,v1' v2'是碰撞后的速度。
struct ball_t {
double m; // 质量
double v; // 速度,速度为正表示球体往x轴正方向运动
double pos; // 在x坐标轴的位置
};
请实现以下函数:
void progress(ball_t & b1, ball_t & b2, double leftWall, double rightWall, double t);
这个函数输入两个球的当前状况(包括质量,速度,在x轴的位置),以及左右墙壁的位置,输出两个球在t秒钟后的状况(包括质量,速度,在x轴的位置)。
特殊说明:球体碰撞墙面也是完全弹性碰撞,即球体速度变为原本的负数。
- struct ball_t {
- double m;
- double v;
- double pos;
- };
-
- void progress(struct ball_t b1,struct ball_t b2, double leftWall, double rightWall, double t)
- {
- double i;
- b1.pos=leftWall+(int)(b1.v*t+b1.pos)%(int)(rightWall-leftWall);
- b2.pos=leftWall+(int)(b2.v*t+b2.pos)%(int)(rightWall-leftWall);
- for(i=0;i<t;i+=0.1)
- {
- if((b1.v*t+b1.pos>leftWall&&b1.v*t+b1.pos<rightWall)&&(b2.v*t+b2.pos>leftWall&&b2.v*t+b2.pos<rightWall))
- {
- if(b1.v*t+b1.pos-b2.v*t+b2.pos<=0.000001||b1.v*t+b1.pos-b2.v*t+b2.pos>=-0.000001)
- {
- b1.v=(b1.v*(b1.m-b2.m)+2*b2.m*b2.v)/(b1.m+b2.m);
- b2.v=(b2.v*(b2.m-b1.m)+2*b1.m*b1.v)/(b1.m+b2.m);
- }
- }
- else if(b1.v*t+b1.pos<=leftWall||b1.v*t+b1.pos>=rightWall)
- {
- b1.v=-b1.v;
- }
- else if(b2.v*t+b2.pos<=leftWall||b2.v*t+b2.pos>=rightWall)
- {
- b2.v=-b2.v;
- }
- }
- printf("t %lf\nb1.m %lf b1.v %lf b1.pos %lf\nb2.m %lf b2.v %lf b2.pos %lf",t,b1.m,b1.v,b1.pos,b2.m,b2.v,b2.pos);
- }
-
- int main()
- {
- struct ball_t b1,b2;
- double leftWall,rightWall,t;
-
- printf("输入第一个球的状态\n");
- scanf("%lf%lf%lf",&b1.m,&b1.v,&b1.pos);
- printf("输入第二个球的状态\n");
- scanf("%lf%lf%lf",&b2.m,&b2.v,&b2.pos);
- printf("输入左右边界和时间状态\n");
- scanf("%lf%lf%lf",&leftWall,&rightWall,&t);
- progress(b1,b2,leftWall,rightWall,t);
-
- return 0;
- }
有问题待解决
5、一个工程由如下文件组成:
head1.h head2.h src1.cpp src2.cpp main.cpp
最终编译结果为xxx.exe(或者xxx,如果在linux下的话)
请写出你熟悉的某种编译器将这5个文件转换为最终结果xxx.exe(或xxx)的详细过程。写出每一个步骤,并作相关的解释,如果你熟悉某编译器的话,请写出这个编译器每一步用到的命令行。
gcc main.o src1.o src2.o -o xxx
gcc main.c -c mian.o
src1.o : src1.cpp head1.h
gcc -c src1.cpp 等价于 gcc src1.cpp -c src1.o
src2.o : src2.cpp head2.h
gcc -c src2.cpp 等价于 gcc src2.cpp -c src2.o
在Linux下
xxx: src1.o src2.o main.o
gcc -o main.o xxx -----
main.o:main.c |不知道这两步是否正确
gcc -c main.c -----
src1.o : src1.cpp head1.h
gcc -c src1.cpp
src2.o : src2.cpp head2.h
gcc -c src2.cpp