2019西电机试算法题
Problem 1
题目描述:任意给定n个整数,求这n个整数序列的和、最小值、最大值。
输入描述:输入一个整数n,代表接下来输入整数的个数,0<n<=100,接着输入n个整数,整数用int表示即可。
输出描述:输出整数序列的和、最小值、最大值。用空格隔开,占一行。
代码:如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include<cstdio> #include<climits>
using namespace std; int main(){ int n; scanf("%d",&n); int sum=0,mx=INT_MIN,mn=INT_MAX; int num; for(int i=0;i<n;++i){ scanf("%d",&num); sum+=num; mx=max(mx,num); mn=min(mn,num); } printf("%d %d %d\n",sum,mn,mx); }
|
Problem 2
题目描述:
输入描述:输入一个二进制整数n,其长度>0且不大于10。
输出描述:输出转换后的十进制数,占一行。
代码:如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include<iostream> #include<string>
using namespace std; int main(){ string str; cin>>str; int num; for(int i=0;i<str.size();++i){ num=num*2+str[i]-'0'; } cout<<num<<endl; return 0; }
|
Problem 3
题目描述:打印n阶实心菱形。
输入描述:输入一个整数n,0<n<=10
输出描述:输出n阶实心菱形,占2*n-1行。
代码:如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #include<cstdio>
using namespace std; int main(){ // 规律 上下对称。 n-1 1 n-1 // 1 3 5 3 1 //对应行号:1 2 3 4 5 for(int i=1;i<n-1;++i){ for(int j=1;j<=i;++j){ cout<<"*"; } cout<<endl; } for(int j=1;j<=2*n-1;++j){ cout<<"*"; } cout<<endl; for(int i=1;i<) }
|
Problem 4
题目描述:将大整数用字符串存储起来,并将其每一位拆分开,按照字符的顺序存入int数组中,数组的下标从大数字的低位到高位递增,数组的值即大整数每一位的值。其加减法,也是按位进行运算,注意进位和借位的处理即可。
输入描述:
输出描述:
代码:如下:
1 2 3 4 5 6 7
| #include<iostream> #include<string>
using namespace std; int main(){ }
|
研梦答案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
| #include<cstdio> #include<iostream> #include<cstring> #include<algorithm>
using namespace std; struct bign{ int d[1000]; int len; bign(){ memset(d,0,sizeof(d)); len=0; } };
bign change(char str[]){ bign a; a.len=strlen(str); int count=0; for(int i=0;i<a.len;++i){ if(str[i]=='0'){ ++count; } else{ break; } } for(int i=0;i<a.len-count;++i){ a.d[i]=str[a.len-1-i]-'0'; } a.len-=count; return a; }
int compare(bign a,bign b){ if(a.len>b.len){ return 1; }else if(a.len==b.len){ for(int i=a.len-1;i>=0;--i){ if(a.d[i]>b.d[i]){ return 1; }else if(a.d[i]<b.d[i]){ return -1; } } return 0; }else{ return -1; } }
bign add(bign a,bign b){ bign c; int carry = 0; for(int i=0;i<a.len||i<b.len;++i){ int temp=a.d[i]+b.d[i]+carry; c.d[c.len++]=temp%10; carry=temp/10; } if(carry!=0){ c.d[c.len++]=carry; } return c; }
bign sub(bign a,bign b){ bign c; for(int i=0;i<a.len||i<b.len;++i){ if(a.d[i]<b.d[i]){ a.d[i+1]--; a.d[i]+=10; } c.d[c.len++]=a.d[i]-b.d[i]; } while(c.len-1>=1&&c.d[c.len-1]==0){ c.len--; } return c; }
void print(bign a){ for(int i=a.len-1;i>=0;--i){ cout<<a.d[i]; } cout<<endl; }
int main(){ char str1[1000],str2[1000]; while(cin>>str1>>str2){ bign a=change(str1); bign b=change(str2); if(compare(a,b)<0){ cout<<"-"; print(sub(b,a)); }else{ print(sub(b,a)); } } return 0; }
|