串中,且一定在输入字符串最左边位置; II、输入字符串所有位均代表有效数字,即不存在由'0'开始的输入字符串,比如"0012", "-0012"不会出现; III、 要求输出字符串所有位均为有效数字,结果为正或0时'+'不出现在输出字符串,结果为负时输出字符串最左边位置为'-'。
#include<iostream>
using namespace std;
int count(int a, int b, int c, int op)
{
int result;
int carr=1;
if (c >= 0)
a += c;
else if (a >= 1)
a += c;
else
{
a = 9;
carr = -1;
}
switch (op)
{
case 0:
result = a + b;
break;
case 1:
if (a < b)
{
a += 10;
carr = -1;
}
result = a - b;
break;
case 2:
if (b < a)
{
b += 10;
carr = -1;
}
result = b - a;
break;
case 3:
result = b + a;
break;
default:
break;
}
result *= carr;
return result;
}
void add(const char* num1, const char* num2, char* result)
{
int carry[100],result_[100];
int num1_[100], num2_[100];
int num1_ptr = 0, num2_ptr = 0, ptr=0;
int num1_begin = 0, num2_begin = 0;
int op;//op=0:a+b op=1:a-b op=2:b-a op=3:-b-a
int carr = 0;
carry[0] = 0;
for (int i = 0; i < 100; i++)
num1_[i] = num2_[i] = 0;
if (num1[0] == '-'&&num2[0] == '-')
{
op = 3;
carr = -1;
num1_ptr++;
num2_ptr++;
num1_begin = num2_begin = 1;
}
else if (num1[0] == '-')
{
op = 2;
num1_ptr++;
num1_begin = 1;
}
else if (num2[0] == '-')
{
op = 1;
num2_ptr++;
num2_begin = 1;
}
else
op = 0;
while (num1[num1_ptr] != 0)
{
num1_[num1_ptr] = num1[num1_ptr] - '0';
num1_ptr++;
}
while (num2[num2_ptr] != 0)
{
num2_[num2_ptr] = num2[num2_ptr] - '0';
num2_ptr++;
}
num1_ptr--;
num2_ptr--;
while (num1_ptr >= num1_begin || num2_ptr >= num2_begin)
{
if (num1_ptr < num1_begin){
int temp;
temp = count(0, num2_[num2_ptr], carry[ptr], op);
if (temp < 0)
{
carry[ptr+1] = -1;
temp = -temp;
}
else
carry[ptr+1] = temp / 10;
result_[ptr++] = temp % 10;
num2_ptr--;
}
else if (num2_ptr < num2_begin)
{
int temp;
temp = count(num1_[num1_ptr], 0, carry[ptr], op);
if (temp < 0)
{
carry[ptr + 1] = -1;
temp = -temp;
}
else
carry[ptr + 1] = temp / 10;
result_[ptr++] = temp % 10;
num1_ptr--;
}
else
{
int temp;
temp = count(num1_[num1_ptr], num2_[num2_ptr], carry[ptr], op);
if (temp < 0)
{
carry[ptr + 1] = -1;
temp = -temp;
}
else
carry[ptr + 1] = temp / 10;
result_[ptr++] = temp % 10;
num1_ptr--;
num2_ptr--;
}
}
int index = 0;
if (carry[ptr] == 1)
result_[ptr++] = 1;
else if (carry[ptr] < 0)
{
result_[0] = 10 - result_[0];
for (int i = 1; i < ptr; i++)
result_[i] = 9 - result_[i];
result[index++] = '-';
}
if (op == 3)
result[index++] = '-';
while (result_[ptr - 1] == 0)
ptr--;
for (int i = ptr - 1; i >= 0; i--)
{
result[index++] = result_[i] + '0';
}
result[index] = 0;
}
int main()
{
char num1[100], num2[100];
char result[101];
result[0] = 0;
cin >> num1;
cin >> num2;
add(num1, num2, result);
cout << result;
system("pause");
return 0;
}
6.数组比较问题描述: 比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。请编程实现上述比较,并返回比较中发现的不相等
元素的个数比如: 数组{1,3,5}和数组{77,21,1,3,5}按题述要求比较,不相等元素个数为0
数组{1,3,5}和数组{77,21,1,3,5,7}按题述要求比较,不相等元素个数为3 要求实现函数: int array_compare(int len1, int array1[], int len2, int array2[]) 【输入】 int len1:输入被比较数组1的元素个数; int array1[]:输入被比较数组1; int len2:输入被比较数组2的元素个数; int array2[]:输入被比较数组2; 【输出】 无 【返回】 不相等元素的个数,类型为int 示例 1) 输入:int array1[] = {1,3,5},int len1 = 3,int array2[] = {77,21,1,3,5},int len2 = 5 函数返回:0 2) 输入:int array1[] = {1,3,5},int len1 = 3,int array2[] = {77,21,1,3,5,7},int len2 = 6 函数返回:3
#include<iostream>
using namespace std;
int array_compare(int len1, int array1[], int len2, int array2[])
{
int count = 0;
len1--;
len2--;
while (len1 >= 0 && len2 >= 0)
{
if (array1[len1--] == array2[len2--])
count++;
}
return count;
}
int main()
{
int len1, len2;
int array1[100], array2[100];
cin >> len1;
for (int i = 0; i < len1; i++)
cin >> array1[i];
cin >> len2;
for (int i = 0; i < len2; i++)
cin >> array2[i];
cout << array_compare(len1, array1, len2, array2);
system("pause");
return 0;
}
7.约瑟夫问题问题描述: 输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。从数列首位置开始计数,计数到m后,将数列该位置数值替换计数值m,并将数列
该位置数值出列,然后从下一位置从新开始计数,直到数列所有数值出列为止。如果计数到达数列尾段,则返回数列首位置继续计数。请编程实现上述计数过程,同时输出数
值出列的顺序 比如: 输入的随机数列为:3,1,2,4,初始计数值m=7,从数列首位置开始计数(数值3所在位置) 第一轮计数出列数字为2,计数值更新m=2,出列后数列为3,1,4,从数值4所在位置从新开始计数第二轮计数出列数字为3,计数值更新m=3,出列后数列为1,4,从数值1所在位置开始计数第三轮计数出列数字为1,计数值更新m=1,出列后数列为4,从数值4所在位置开始计数最后一轮计数出列数字为4,计数过程完成。输出数值出列顺序为:2,3,1,4。
要求实现函数: void array_iterate(int len, int input_array[], int m, int output_array[]) 【输入】 int len:输入数列的长度; int intput_array[]:输入的初始数列 int m:初始计数值【输出】 int output_array[]:输出的数值出列顺序
【返回】无 示例 输入:int input_array[] = {3,1,2,4},int len = 4, m=7 输出:output_array[] = {2,3,1,4}
#include<iostream>
using namespace std;
void array_iterate(int len, int input_array[], int m, int output_array[])
{
int out_ptr = 0, ptr = 0;
while (out_ptr < len)
{
int i = 1;
while (i < m)
{
if (ptr == len)
ptr = 0;
if (input_array[ptr] == -1)
ptr++;
else
{
i++;
ptr++;
}
}
if (ptr == len)
ptr = 0;
while (input_array[ptr] == -1)
{
ptr++;
if (ptr == len)
ptr = 0;
}
m = input_array[ptr];
output_array[out_ptr++] = m;
input_array[ptr++] = -1;
}
}
int main()
{
int input_array[100], output_array[100];
int m;
int n;
cin >> n >> m;
for (int i = 0; i < n; i++)
cin >> input_array[i];
array_iterate(n, input_array, m, output_array);
for (int i = 0; i < n; i++)
cout << output_array[i] << " ";
system("pause");
return 0;
}
9. 一副牌中发五张扑克牌给你:让你判断数字的组成: 有以下几种情况: 1:四条:即四张一样数值的牌(牌均不论花色)2:三条带一对 3:三条带两张不相同数值的牌 4:两对 5:顺子包括 10,J,Q,K,A 6:什么都不是 7:只有一对
#include<iostream>
using namespace std;
void test(int a[], int len)
{
int backet[12];
int count4 = 0, count3 = 0, count2 = 0,count=0;
int Is = 0;//顺子
for (int i = 0; i < 12; i++)
backet[i] = 0;
for (int i = 0; i < len; i++)
backet[a[i] - 3]++;
for (int i = 0; i < 12; i++)
{
if (backet[i] == 4)
count4++;
else if (backet[i] == 3)
count3++;
else if (backet[i] == 2)
count2++;
else if (backet[i] == 1)
{
count++;
if (count == 5)
Is = 1;
}
else
count = 0;
}
if (count4 == 1)
cout << "四条";
else if (count3 == 1 && count2 == 1)
cout << "三条带一对";
else if (count3 == 1)
cout << "三条带不同数值";
else if (count2 == 2)
cout << "两对";
else if (count2 == 1)
cout << "一对";
else if (Is == 1)
cout << "顺子";
else
cout << "神麻都不是";
}
int main()
{
int a[6];
for (int i = 0; i < 5; i++)
cin >> a[i];
test(a, 5);
system("pause");
return 0;
}
//3 4 5 6 7 8 9 10 J Q K A
//0 1 2 3 4 5 6 7 8 9 10 11