0
点赞
收藏
分享

微信扫一扫

作业比赛编号 : 1258 - 2022年春季学期《算法分析与设计》练习4

爱情锦囊 2022-04-24 阅读 45
c++

只需要看第四行的字符特点就可以了:

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    int n;
    int i, j;
    char a[5][100];
    cin >> n;
    for (i = 0; i < 5; i++)
        cin >> a[i];
    int l = strlen(a[0]);
    int m = 0;
    for (i = 0; i < l; i++)
    {
        m++;
        if (m == 1 && a[3][i] == '*')
            cout << "2";
        if (m== 2 && a[3][i] == '*')
            cout << "1";
        if (m == 3 && a[3][i] == '*')
            cout << "3";
        if (m == 4)
            m= 0;
    }
    cout << endl;
    return 0;
}

1407: 数的划分

#include<algorithm>
#include<iostream>
using namespace std;
int fun(int n, int m)
{
	if (m == 1 || n == 1)
	{
		return 1;
	}
	if (m >n)
	{
		return fun(n, n);
	}
	if (m == n)
	{
		return 1 + fun(n, m - 1);
	}
	if(m<n)
	{
		return fun(n-m,m) + fun(n, m - 1);//包括m和不包括m
	}
}
int main()
{
	int n;
	while (cin >> n)
	{
		cout << fun(n, n) << endl;
	}
}

2173: 外观数列

#include<algorithm>
#include<iostream>
#include<string>
using namespace std;
 
string fun(int n) {
    if (n == 1) {
        return "1";
    }
 
    string ss = fun(n - 1);
    string res = "";
    int count = 1;
 
    for (int i = 0; i < ss.length(); i++) {
        if (ss[i] == ss[i + 1]) {
            count++;
        }
        else {
            res +=to_string(count)+ ss[i];
            count = 1;
        }
    }
 
    return res;
}
 
int main()
{
    int n;
    while (cin >> n)
        cout << fun(n) << "\n";
 
}

1427: 线性搜索

#include<algorithm>
#include<iostream>
using namespace std;
int a[10005];
int b[505];
int main()
{
	int n, q;
	int count = 0;
	while (cin >> n)
	{
		count = 0;
		for (int i = 0; i < n; i++)
		{
			scanf("%d", &a[i]);
		}
		scanf("%d", &q);
		for (int i = 0; i < q; i++)
		{
			scanf("%d", &b[i]);
		}
		for (int i = 0; i < n; i++)
		{
			int flag = a[i];
			for (int j = 0; j < q; j++)
			{
				if (b[j] == flag)
				{
					count++;
				}
			}
		}
		printf("%d\n", count);
		
	}
}

1418: 二分搜索(递归)

#include<algorithm>
#include<iostream>
using namespace std;
int fun(int a[], int left, int right,int n)
{
	
	if (left > right)
	{
		return -1;
	}
		int mid = (left + right) / 2;
		if (a[mid] == n)
		{
			return mid+1;
		}
		else if (a[mid] > n)
		{
			return fun(a,left,mid-1,n);
		}
		else 
		{
			return fun(a, mid + 1, right, n);
		}
		
	}
	


int main()
{
	int m, n;
	int a[1005];
	while (cin >> m)
	{
		for (int i = 0; i < m; i++)
		{
			cin >> a[i];
		}
		cin >> n;
		cout << fun(a, 0, m, n) << endl;
		
	}
}

1418: 二分搜索(非递归)

#include<algorithm>
#include<iostream>
using namespace std;
int fun(int a[], int left, int right,int n)
{
	
	while (left<=right)
	{
		int mid = (left + right) / 2;
		if (a[mid] == n)
		{
			return mid+1;
		}
		else if (a[mid] > n)
		{
			right = mid-1;
		}
		else 
		{
			left = mid+1;
		}
		return -1;
	}
	
}
int main()
{
	int m, n;
	int a[1005];
	while (cin >> m)
	{
		for (int i = 0; i < m; i++)
		{
			cin >> a[i];
		}
		cin >> n;
		cout << fun(a, 0, m, n) << endl;
		
	}
}

1424: 二分搜索升级版

#include<algorithm>
#include<iostream>
using namespace std;
int fun(int a[], int left, int right,int n)
{
	
	if (left > right)
	{
		return -1;
	}
		int mid = (left + right) / 2;
		if (a[mid] == n)
		{
			return mid+1;
		}
		else if (a[mid] > n)
		{
			return fun(a,left,mid-1,n);
		}
		else 
		{
			return fun(a, mid + 1, right, n);
		}
		return -1;
	}
	


int main()
{
	int m, n;
	int a[1005];
	while (cin >> m)
	{
		for (int i = 0; i < m; i++)
		{
			cin >> a[i];
		}
		cin >> n;
		int result = fun(a, 0, m, n);
		if (result!= -1)
		{
			cout << result << " " << result << endl;
		}
		else
		{
			int f1, f2;
			for (int i = 0; i < m; i++)
			{
				if (a[i] > n)
				{
					 f2 = i+1;
					 f1 = f2 - 1;
					break;
				}
			}
			cout << f1 << " " << f2 << endl;
		}
		
	}
}

1430: Strange function

#include<algorithm>
#include<iostream>
using namespace std;
double fun(double x, double y)
{

	return 6 * pow(x, 7) + 8 * pow(x, 6) + 7 * pow(x, 3) + 5 * pow(x, 2) - y * x;
}
int main()
{
	int t; double y;
	cin >> t;
	while (t--)
	{
		cin >> y;
		double l = 0, r = 100, mid, mmid;
		mid = (l + r) / 2.0;
		mmid = (mid + r) / 2.0;
		while (fabs(mid - mmid) > 1e-8)
		{
			if (fun(mid, y) < fun(mmid, y))
			{
				r = mmid;
			}
			else
				l = mid;
			 mid = (l + r) / 2.0;
        mmid = (mid + r) / 2.0;
		}
		printf("%.4lf\n", fun(mid, y));
	}
}

举报

相关推荐

0 条评论