考研各大学编程题
川大2007年
1、求平均值的递归
float Average(float A[],int n)
{
if(n==0) return 0;
if(n == 1)
return A[n-1];
else
return (A[n-1]+(n-1)*Average(A,n-1))/n;
}
2、字符串转换成整数
int Atol(char *strNum)
{
int flag = 1;
int i,n,num = 0 ;
for(i = 0; strNum[i] != '\0';i++)
{
if(strNum[i] == '-')
flag = -flag;
if(strNum[i] >='0' && strNum[i] <= '9')
{
num = num * 10 + strNum[i] - '0';
}
}
return flag == -1 ? -num : num;
}
3、实现拓扑排序
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
int n,m,x,y;
cin>>n>>m;
vector<vector<int>> v(n+1,vector<int>(n+1,0));
vector<bool> visited(n+1,false);
vector<int> res;
vector<int> indegree(n+1,0);
for(int i = 0 ; i < m; i++)
{
cin>>x>>y;
v[x][y] = 1 ;
indegree[y]++;
}
multiset<int> q;
for(int i = 1 ; i <= n ; i++)
{
if(indegree[i] == 0 )
{
q.insert(i);
visited[i] = true;
}
}
while(!q.empty())
{
int cur = *q.begin();
q.erase(q.begin());
res.push_back(cur);
for(int i = 0 ; i < v[cur].size(); i++)
{
if(v[cur][i] == 0) continue;
if(--indegree[i] == 0 && !visited[i])
{
visited[i] = true;
q.insert(i);
}
}
}
for(auto i :res)
{
cout<<i<<" ";
}
return 0;
}
北京理工大学2013
#include<stdio.h>
#include<math.h>
using namespace std;
int main()
{
int k , n;
scanf("%d %d",&k,&n);
int res;
int tmp;
for(int i = n,j = 1 ; i >=1,j<=n ; i--,j++)
{
res += j*pow(10,i-1)*k;
}
printf("%d",res);
return 0;
}
北京理工大学2014
1、
1/2+1/4+1/8+1/\(2^n\)
#include<stdio.h>
#include<math.h>
int main()
{
int n ;
scanf("%d",&n);
double res;
for(int i = 1; i <= n ; i++)
{
res += 1.0/pow(2,i);
}
printf("%.17lf",res);
return 0;
}
2、
从键盘中输入三个数字,然后按从大到小的顺序输出
int main()
{
double a,b,c;
scanf("%lf %lf %lf",&a,&b,&c);
if(a < b)
{
double tmp = a ;
a = b;
b = tmp;
}
if(b < c)
{
double tmp = b ;
b = c;
c = tmp;
}
if(a < b)
{
double tmp = a ;
a = b;
b = tmp;
}
printf("%lf %lf %lf",a,b,c);
return 0;
}
3、
从键盘输入一个大写字母,则输出一个对称的序列,如输入E,则输出AbCdEdCbA
int main()
{
char c;
c = getchar();
char x = 'A';
char y = 'a';
if(c>='A' && c<='Z')
{
int n = c - 'A' + 1;
for(int i = 1; i < n; i++)
{
if(i % 2 == 1)
{
printf("%c",x+i/2);
x=x+1;
}
else
printf("%c",y+i-1);
}
printf("%c",c);
for(int i = n-1; i >=1 ; i--)
{
if(i % 2 == 1)
{
x = x-1;
printf("%c",x+i/2);
}
else
printf("%c",y+i-1);
}
}
return 0;
}
测试结果为: A A
B ABA
C AbCbA
D AbCDCbA
E AbCdEdCbA
Z AbCdEfGhIjKlMnOpQrStUvWxYZYxWvUtSrQpOnMlKjIhGfEdCbA
4、
给出一个链表的结构为
struct node{
int data;
struct node *next;
};
从键盘中输入整数,以输入@表示结束,建立一个链表,最后要求从小到大输出链表的数据值。
#include<stdio.h>
#include<stdlib.h>
struct node{
int data;
struct node *next;
};
int lenList(node *head)
{
if (head == NULL)
return 0;
node *p = head;
int len = 0;
while(p != NULL)
{
len++;
p = p->next;
}
return len-1;
}
void printList(node *head)
{
node *p = head;
int len = lenList(head);
while (len--)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
void sortList(node *head)
{
int len = lenList(head);
//printf("%d",len);
if (len == 0)
return;
node *p = head;
int i, j, tmp;
for (i = 0; i < len - 1; i++)
{
p = head;
for (j = 0; j < len -i -1; j++)
{
if (p->data > p->next->data)
{
tmp = p->data;
p->data = p->next->data;
p->next->data = tmp;
}
p = p->next;
}
}
}
int main()
{
int n;
node* p = (node*)malloc(sizeof(node));
node* head = p;
char s;
while(1)
{
scanf("%d",&n);
p->data = n;
if(getchar() =='@') break;
p->next = (node*)malloc(sizeof(node));
p = p->next;
}
p->next = nullptr;
sortList(head);
printList(head);
system("pause");
return 0;
}
东南大学软工2012
#include<bits/stdc++.h>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include<map>
#include<unordered_map>
using namespace std;
//第一题
int main1()
{
for(int i = 0 ; i < 8 ; i++)
{
if(i % 2 == 0)
cout<<i+1<<endl;
if(i%3 ==0)
continue;
if(i % 5 ==0)
break;
cout<<"end\n";
}
cout<<"end\n";
/*
1
end
3
end
5
end
end
*/
return 0;
}
//第二题
int main2()
{
int c;
if((c = cin.get()) != EOF)
{
main2(); //if语句执行 就执行main函数
cout<<c;
}
return 0;
}
//第三题
void fun(int a[],int cur,int s)
{
{
if(cur < s)
fun(a,cur+1,s);
cout<<a[cur]<<",";
}
}
int main3()
{
int a[] = {1,2,3,4,5,6,7,8,9,10};
// int n = sizeof(a)/sizeof(a[0]);
// cout<<n<<endl;
// for(int i = 0 ; i < n ;i++)
// {
// cout<<a[i]<<" ";
// }
// cout<<endl;
// cout<<a[10]<<endl;
fun(a,0,10); //1,10,9,8,7,6,5,4,3,2,1 错误的
return 0;
}
//编程题第一题 求最小公倍数
int main4()
{
int m ,n,temp,i;
int t;
printf("Input m,n\n");
scanf("%d%d",&m,&n);
if(m<n) /*比较大小,使得m中存储大数,n中存储小数*/
{
temp = m;
m = n;
n = temp;
}
for(i = m; i > 0 ; i--)
{
if(m % i == 0 && n % i == 0)
{
t = i;
break;
}
}
printf("The LCM of %d and %d is %d\n",m,n,m*n/t);
return 0;
}
//最大公约数
int main6()
{
int m , n, temp, i;
int t;
printf("Input m,n\n");
scanf("%d%d",&m,&n);
if(m<n) /*比较大小,使得m中存储大数,n中存储小数*/
{
temp = m;
m = n;
n = temp;
}
for(i = m; i > 0 ; i--)
{
if(m % i == 0 && n % i == 0)
{
t = i;
break;
}
}
printf("The largest common divisor:%d\n", t);
return 0;
}
//编程题第二题
int main5()
{
int n;
cin>>n;
int m;
int res;
while(n--)
{
cin>>m;
res += m ;
}
cout<<res<<endl;
return 0;
}
//编程题 第三题
int main7()
{
string str,s ;
map<string,int> m;
map<string,int>::iterator iter;
cout<<"please input test : "<<endl;
getline(cin,str);
istringstream is(str);
while(is>>s)
{
iter = m.find(s);
if(iter != m.end())
{
iter->second++;
} else
{
m.insert(make_pair(s,1));
}
}
m.erase("!");
m.erase(",");
m.erase(".");
m.erase("?");
for(map<string,int>::iterator it = m.begin() ; it != m.end(); it++)
{
cout<<"单词 "<<it->first<<" 的个数为 : "<<it->second<<endl;
}
return 0;
}
保持好奇心!

浙公网安备 33010602011771号