此图片里的内容题设 有什么比较好的解决方法不?谢谢大家 希望帮助谢谢!
3条回答 默认 最新
- wanghui0380 2024-06-05 18:18关注
他特别说明不让用数组,表示其实用数组有简单解法。
所以不妨你先用数组想。我先拼接2个123456
123456123456
然后你发现了规律了,就是每次索引+1,从索引处取6个
123456 索引0
234561 索引1
345612 索引2
456123 索引3
561234 索引4
612345 索引5
这是数组解解法
换他题目要求的解法。你可以观察到这是一个周期性的东西。既然如此你可以看成一个周期函数,这个函数周期是6,那么每次索引+1,其实就是相位。
现在补个图:你看一下就明白了
这是信号处理里面5大基础波形的锯齿波,既然是波,如果你移动初始相位,我想你可以理解我要表达什么了的把至于解法,前面专家-赤兔[在线] 已经有解了。你参考那个看。外层循环就是产生相位的,内层循环就是产生周期的
当然我个人评价那个写的麻烦了点 周期长度就是6,直接 j=i to i+6 然后取模 即可。算了还是写个例子好了,实现2种方法都不用数组的(不过我不想开另IDE,所以直接用C#)
下面是C#代码,你要C++的看懂的自己改static void Main(string[] args) { Console.WriteLine("方法一"); make(6); Console.WriteLine("方法二"); make2(6); Console.ReadKey(); return; //正常的波形+相位 void make(int rate) { for (int i = 0; i < rate; i++) { for (int j = 0; j < rate; j++) { var m = (j + i) % rate; Console.Write(m + 1); } if (i < rate -1) Console.Write(Environment.NewLine); } } //如果看成波形和相位,其实还能有另外反推法,用商当相位,这样么一个循环也可 void make2(int rate) { for (int i = 0; i < rate *rate; i++) { var m = i / rate; var n = i + m; var j = n % rate; Console.Write(j+1); if(i%rate==(rate-1)&&i<rate*rate-1) Console.Write(Environment.NewLine); } } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用