考研各大学编程题

川大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;	
}

posted @ 2020-08-26 22:24  Akmf's_blog  阅读(218)  评论(0)    收藏  举报