除法
输入正整数n,按从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2<=n<=79.
样例输入:
62
样例输出:
79546/01238=62
94736/01528=62
这是我的解法,大家有什想法可以评论我。
#include<iostream>using namespace std;bool Judge(int d,int i){int a[5], b[5], j, k;for ( j = 0; j < 5; j++){a[j] = d % 10;d /= 10;b[j] = i % 10;i /= 10;}for (j = 0; j < 5;j++)for (k = j+1; k < 5;k++)if (a[j] == a[k] || b[j] == b[k])return false;for (j = 0; j < 5; j++)for (k = 0; k < 5; k++){if (a[j] == b[k])return false;}return true;}int main(){int n, d;while (cin >> n){for (int i = 1234; i*n< 98765; i++){d = n*i;if (Judge(d, i)&&i>10000)cout << d << "/" << i << "=" << n << endl;if (Judge(d,i)&&i<10000)cout << d << "/" << "0" << i << "=" << n << endl;}}return 0;}
输入n个元素组成的序列s,你需要找出一个乘积最大的连续子序列。如果这个最大的成绩不是正数,应输入-1(表示无解)。输入0结束输入。1<=n<=18,-10<=Si<=10。
样例输入:
3
2 4 -3
样例输出:
8
20
这道,题对于我这种初学者来说很耐人寻味,它的思路是那个算出所有1-i的乘积然后 穷举串子串 比较 取出最大的那个。实在是高啊!佩服!#include<iostream>
#include<string>
using namespace std;
const int oo = 99999999;
int main()
{
int n,i,j;
long long a[18], b[18],max;
while (cin >> n)
{ memset(a, 0, sizeof(a));
a[0] = 1; max = -oo;
if (n > 10 || n < -10)break;
for (i = 1; i <=n; i++)
{
cin >> b[i];
a[i] = b[i] * a[i - 1];//将1到i个数的乘积放到a[]数组里
}
for (i = 1; i <= n; i++)//字串可能的长度
{
for (j = i; j <= n; j++)
{
if (a[j] / a[j - i]>max)
max = a[j] / a[j - i];
}
}
if (max < 0)max = -1;
cout << max << endl;
}
return 0;
}
输入正整数k,找到所有正整数x>=y,使得1/k=1/x + 1/y。
样例输入:
2
样例输出:
1/2=1/6 + 1/3
1/2=1/4 + 1/4
程序代码:
7.1.4双基回文数#include<iostream>
#include<iostream>
using namespace std;
int main()
{
int k;
while (cin >> k)
{
int sum = 0;
int y; float x;
for (y = 1; y <= 2 * k; y++)
{
x = (float(k*y) / float(y - k));
if ((int)x == x&&x > 0)sum++;
}
cout << sum << endl;
for ( y = 1; y <= 2 * k; y++)
{
x = (float(k*y) / float(y - k));
if ((int)x == x&&x > 0)
{
cout << "1/" << k << "=1/" << x << "+1/" << y << endl;
}
}
}
}
如果一个正整数最小n至少在两个不同的进制位b1和b2下都是回文数(2<=b1,b2<=10),则称n是双基回文数(注意,回文数不能包含前导零)。输入正整数S<10^9,输出比S大的最小双基回文数。
样例输入:
1600000
样例输出:
1632995
我真了,书上写的是s<10^6次 举例子给的是1600000!#include<iostream>
using namespace std;
bool Judge(int n, int m)//将n转换成m进制
{
int i, k=0;
int a[100], b[100];
for (i = 0;; i++)
{
a[i] = n%m;
//n /= m;
n = n / m;
if (n == 0)break;
}
k = i;
for (int j = k, i = 0; j >= 0; j--, i++)
b[i] = a[j];
b[k + 1] = '\0';
bool flag = 1;
for (i = 0;; i++)
{
if (i > (k / 2))break;
if (b[i] != b[k - i]){ flag = 0; break; }
}
if (flag)return 1;
else return 0;
}
int main()
{
int n;
while (cin >> n)
{
for (;; n++)
{int k = 0; bool flag = 0;
for (int m = 2; m <= 10; m++)
{
if (Judge(n, m)) k++;
if (k >= 2){ flag = 1; break; }
}
if (flag){ cout << n << endl; break; }
//if (n >= 1000000000)break;
}
}
return 0;
}