如何在C中按打字顺序打印整数 - 增加,减少或均匀地打印
问题描述:
我试图编写一个c程序时遇到问题。程序必须将整数存储在数组中(从键盘读取)。例如,如果输入:3 2 0 5 5 5 8 9,输出应为:如何在C中按打字顺序打印整数 - 增加,减少或均匀地打印
3 2 0 - 递减 5 5 5 - 均匀 8 9 - 越来越多
对我来说问题是,我不能写一个能够在所有情况下工作的算法。 我试图用另一个数组“标记”元素(使用相同的索引,为每个整数保存一个值1-增加,-1减少和0均匀),但这部分工作。 你有其他想法吗? 感谢提前:)
#include <stdio.h>
#include <stdlib.h>
main() {
int array[100];
int flag[100];
int num, i;
printf("Enter how many numbers you want to type: ");
scanf("%d",&num);
for(i=0;i<num;i++) {
scanf("%d",&array[i]);
}
for(i=0;i<num;i++){
if((array[i]<array[i+1])) {
flag[i]=flag[i+1]=1;
}
if(array[i]>array[i+1]) {
flag[i]=flag[i+1]=-1;
}
}
for(i=0;i<num;i++) {
if(array[i]==array[i+1]) {
flag[i]=flag[i+1]=0;
}
}
for(i=0;i<num;i++){
printf("%d ",flag[i]);
}
printf("\n");
for(i=0;i<num;i++) {
if(flag[i]==1) {
do{
if(flag[i]==1){
printf("%d ",array[i]);
i++;
}
}while(flag[i]==1);
printf(" - increasing\n");
}
if(flag[i]==0) {
do{
if(flag[i]==0){
printf("%d ",array[i]);
i++;
}
}while(flag[i]==0);
printf(" - evenly\n");
}
if(flag[i]==-1) {
do{
if(flag[i]==-1) {
printf("%d ",array[i]);
i++;
}
}while(flag[i]==-1);
printf(" - decreasing\n");
}
}
system("pause");
return 0;
}
答
思考:
如果“第一”的号码属于一个下降的你只知道,甚至,在你看到的“第二”号或上升序列。
“第三”数字属于与前两个相同的序列,或者是另一个序列的“第一个”数字。
因此:检查两个数字并指定序列类型。
继续检查相同序列中的数字。
如果您不能分配相同的序列,请返回检查两个数字并分配一个序列。
喜欢的东西
int *n1, *n2, *n3;
n1 = <first element>;
n2 = n1 + 1;
n3 = n2 + 1;
/* some kind of loop */
if ((n3 - n2) HAS_SOME_SIGN_AS (n2 - n1)) /* n3 belongs to the sequence */;
n1++;
n2++;
n3++;
/* end loop */
+0
感谢您的帮助! :) – user2280550
答
#include <stdio.h>
int status(a, b){
if(a < b) return 1;
if(a > b) return -1;
return 0;
}
int main() {
int array[100]={0};
int old_status, new_status;
int old_pos;
int num, i, j;
const char* status_message[] = {"decreasing","evenly","increasing", "i don't know"};
printf("Enter how many numbers you want to type: ");
scanf("%d",&num);
for(i=0;i<num;i++)
scanf("%d",&array[i]);
//{num | 1 < num <= 100}
old_status =status(array[0], array[1]);
old_pos = 0;
for(i=1;i<num;++i){
new_status = status(array[i-1], array[i]);
if(old_status != new_status){
for(j=old_pos;j<i;++j)
printf("%d ", array[j]);
printf("- %s\n", status_message[1 + old_status]);
old_status = (i<num-1)? status(array[i], array[i+1]):2;
old_pos = i;
}
}
if(old_pos < num){ //not output section output
for(j=old_pos;j<i;++j)
printf("%d ", array[j]);
printf("- %s\n", status_message[1 + old_status]);
}
return 0;
}
你可以添加更多的例子?如果用户输入'4 2 5 8 0 9 1 6 6',你想要什么? – vidit
是的,并且应该在打字的顺序由用户 – user2280550
4 2被划分 - 递减 5 8 - 增加 0 9 - 增加 1 6 - 增加 6 - 我不知道, – user2280550