| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1195 人关注过本帖
标题:循环语句和条件语句嵌套,还需要跳出循环
只看楼主 加入收藏
初学者_123
Rank: 2
等 级:论坛游民
帖 子:25
专家分:14
注 册:2021-11-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
循环语句和条件语句嵌套,还需要跳出循环
我的数据矩阵第2:最后一列由1和-1,0,第一列是时间的数据,其余每一列代表一次模拟,0只在矩阵的后面出现,1代表一种状态,-1代表另一种状态,系统在开始时,处于1状态,一段时间后切换为-1,假设当-1这种状态能最少保持20个时间节点,就认为状态切换成功。
我需要解决的问题是:统计每次模拟的切换次数


这里,我编造了一个12*4的矩阵,假设从1切换为-1,且-1这种状态最少保持3个时间节点,就认为状态切换成功。



0.5 1 -1 -1 1;
1 1 -1 -1 1;
1.5 -1 -1 -1 1;
2 -1 -1 1 1;
2.5 -1 -1 1 -1;
3 -1 1 1 1;
3.5 1 1 1 1;
4 1 1 -1 1;
4.5 -1 1 -1 1;
5 -1 1 -1 1;
5.5 -1 1 -1 1;
6 -1 1 -1 1;

针对上面的矩阵,该如何设置程序统计切换次数,自己试过很多次,都不行
        
搜索更多相关主题的帖子: 状态 循环 语句 切换 时间 
2022-07-06 21:27
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
看了三遍,听不懂
2022-07-06 21:35
初学者_123
Rank: 2
等 级:论坛游民
帖 子:25
专家分:14
注 册:2021-11-6
收藏
得分:0 
回复 2楼 rjsp
可能是我没解释清楚,例子中假设时间区间[0,6],时间步长为0.5,,数据的第一列为时间节点,其余每一列代表一次模拟的数据,真实数据是随机模拟的结果,因此需要通过多次模拟发现规律。
为了简化处理,用1和-1代表两种不同的状态,系统会在两种状态之间切换,由于随机因素的存在,并不是从1变为-1就视为切换成功,它必须维持在切换后的状态至少1.5秒(假设),才视为切换成功。

即切换成功需要两个条件:(1)从1变为-1(或从-1变为1);(2)维持在切换后的状态至少1.5秒。
 
问题:现在,以例子中的数据编程,统计在每次模拟(即每列数据)中的切换次数

正确答案是:2 1 2 0
2022-07-07 08:19
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
以下是引用初学者_123在2022-7-7 08:19:54的发言:
正确答案是:2 1 2 0


第二列数据{ +1, +1, -1, -1, -1, -1, +1, +1, -1, -1, -1, -1 } ------ 为什么你说答案是2呢?题目中说过“系统在开始时,处于1状态”,因此状态变化是 +1 -1
第三列数据{ -1, -1, -1, -1, -1, +1, +1, +1, +1, +1, +1, +1 } ------ 为什么你说答案是1呢?题目中说过“系统在开始时,处于1状态”,因此状态变化是 +1 -1 +1
第四列数据{ -1, -1, -1, +1, +1, +1, +1, -1, -1, -1, -1, -1 } ------ 为什么你说答案是2呢?题目中说过“系统在开始时,处于1状态”,因此状态变化是 +1 -1 +1 -1
第五列数据{ +1, +1, +1, +1, -1, +1, +1, +1, +1, +1, +1, +1 } ------ 为什么你说答案是0呢?题目中说过“系统在开始时,处于1状态”,因此状态变化是 +1
2022-07-07 09:50
初学者_123
Rank: 2
等 级:论坛游民
帖 子:25
专家分:14
注 册:2021-11-6
收藏
得分:0 
回复 4楼 rjsp
早上有点而事,刚看见消息,回复晚了,不好意思。

真实数据在开始时确实都是1,我编造的例子不严谨,sorry,,本来想体现是四次模拟的切换次数不同,结果编的数据与文字描述矛盾了,再重新编一组数据:
第一列数据{+1, +1, +1, -1, -1, +1, +1, +1, -1, -1, -1, -1}
第二列数据{+1,+1,+1,+1,-1,-1,-1,+1,+1,+1,+1,+1}
第三列数据{+1,+1,+1,-1,-1,-1,-1,-1,+1,+1,+1,+1}
第三列数据{+1,+1,+1,+1,-1,-1,-1,-1,-1,-1,-1,-1}

正确答案是1,2,3,1。
以这个为例,该如何编程序,大神
2022-07-07 16:02
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
第一个是1的话,那最后一个为什么还是1呢?明明最后一个比第一个少一次。

[此贴子已经被作者于2022-7-7 16:20编辑过]

2022-07-07 16:04
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:20 
程序代码:
#include <stdio.h>

void count_chang( const int datas[][4], size_t length, size_t counts[] )
{
    for( size_t c=0; c!=sizeof(*datas)/sizeof(**datas); ++c )
    {
        counts[c] = 0;
        int state = +1;
        size_t n = 0;
        for( size_t r=0; r!=length; ++r )
        {
            if( datas[r][c] == state )
                n = 0;
            else
            {
                ++n;
                if( n == 3 )
                {
                    ++counts[c];
                    state = datas[r][c];
                    n = 0;
                }
            }
        }
    }
}

int main( void )
{
    int datas[][4] = { { +1, -1, -1, +1 }
                     , { +1, -1, -1, +1 }
                     , { -1, -1, -1, +1 }
                     , { -1, -1, +1, +1 }
                     , { -1, -1, +1, -1 }
                     , { -1, +1, +1, +1 }
                     , { +1, +1, +1, +1 }
                     , { +1, +1, -1, +1 }
                     , { -1, +1, -1, +1 }
                     , { -1, +1, -1, +1 }
                     , { -1, +1, -1, +1 }
                     , { -1, +1, -1, +1 } };

    size_t counts[ sizeof(*datas)/sizeof(**datas) ];
    count_chang( datas, sizeof(datas)/sizeof(*datas), counts );

    for( size_t i=0; i!=sizeof(counts)/sizeof(*counts); ++i )
        printf( "Coloumn %zu, statu change count: %zu\n", i+1, counts[i] );

    return 0;
}
2022-07-07 16:21
初学者_123
Rank: 2
等 级:论坛游民
帖 子:25
专家分:14
注 册:2021-11-6
收藏
得分:0 
回复 5楼 初学者_123
第一列数据是{+1, +1, +1, -1, -1, +1, +1, +1, -1, -1, -1, -1},在第四个时间节点是1是变为-1,但它只坚持了1秒(两个时间步长),不能算一次成功的切换,我上面写过,一次成功地切换必须满足两个条件:(1)状态从变为-1(或从-1变为1);(2)在切换后的状态至少维持1.5秒(即至少维持3个时间步长)。
也是因为真实数据有这个特点,所以需要满足这两个条件。可能我错误太多了,您忘记这一点了
2022-07-07 16:29
快速回复:循环语句和条件语句嵌套,还需要跳出循环
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027548 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved