从1到9选择两个不相同数字组成一个两位数n大于等于12,小于98。输入n能组成多少个数
#include <iostream>
using namespace std;
int main() {
int count = 0;
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
if (i != j && (i * 10 + j >= 12 && i * 10 + j <= 98)) {
count++;
}
}
}
cout << "能组成 " << count << " 个数" << endl;
return 0;
}
这个程序中的时间复杂度为$O(n^2)$,其中n是数字的数量。在这种情况下,n为9,因此总共需要进行81次迭代
以下答案引用自CHATGPT
这道题目需要统计两个不相同数字能够组成的不同数字的个数。可以通过两个嵌套循环的方式来实现,外层循环从1到9枚举第一个数字,内层循环从1到9枚举第二个数字,需要排除第一个数字和第二个数字相等的情况。
然后可以将两个数字组成的两位数n转换为字符串形式,判断n是否大于等于12且小于98,如果满足条件则累加计数器。最后输出计数器的值即可。
以下是代码示例:
c++Copy code#include <iostream>
#include <string>
using namespace std;
int main() {
int count = 0;
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
if (i != j) {
string n = to_string(i * 10 + j);
if (n >= "12" && n <= "98") {
count++;
}
}
}
}
cout << count << endl;
return 0;
}
输出结果为:
txtCopy code
72
因此,能够组成72个不同的两位数。
#include"head.h";
//快速排序(从小到大)
void quickSort(int s[], int l, int r)
{
if (l < r)
{
int i = l, j = r, x = s[l];
while (i < j)
{
while (i < j && s[j] >= x) // 从右向左找第一个小于x的数
j--;
if (i < j)
s[i++] = s[j];
while (i < j && s[i] < x) // 从左向右找第一个大于等于x的数
i++;
if (i < j)
s[j--] = s[i];
}
s[i] = x;
quickSort(s, l, i - 1); // 递归调用
quickSort(s, i + 1, r);
}
}
int FindMissMin2(int a[], int length) {
int n = 1;
//将原数组中大于0的数放在新数组中,在新数组中判断未出现的最小正整数。
//这样可以排除原数组中负数的影响
int b[100];
int i = 0, j = 0;
for ( ; i < length; i++) {
if (a[i] > 0) {
b[j] = a[i];
j++;
}
}
//遍历只有正整数的新数组,判断未出现的最小正整数
for (int i = 0; i < j; i++)
{
if (b[i]>n)
{
return n;
}
n++;
}
return n;
}
int main()
{
int a[100];//初始数组长度
printf("请输入数组的长度:\n");
int length;
scanf_s("%d", &length);
printf("请输入数组元素:\n");
int i;
for (i = 0; i < length; i++)
{
scanf_s("%d", &a[i]);
}
quickSort(a, 0, length-1);
printf("未出现的最小正整数为:\n");
int min = FindMissMin2( a, length);
printf("%d\n", min);
system("pause");
return 0;
}